Qual é a diferença entre um sistema “stateful” e “stateless”?

Apache Spark alega que seus operadores (nós) são "sem estado". Isso permite que a arquitetura do Spark use protocolos mais simples para coisas como recuperação, balanceamento de carga e manipulação de retardatários.

Por outro ladoApache Flink descreve seus operadores como "stateful" e afirma que o statefulness é necessário para aplicativos como o aprendizado de máquina. No entanto, os programas Spark são capazes de transmitir informações e manter dados de aplicativos em RDDs sem manter "estado".

O que esta acontecendo aqui? O Spark não é um verdadeiro sistema sem estado? Ou a afirmação de Flink de que o estado é essencial para o aprendizado de máquina e aplicativos similares incorretos? Ou há alguma nuance adicional aqui?

Não sinto que realmente entenda a diferença entre sistemas "sem estado" e "sem estado" e gostaria de saber se eles poderiam ser explicados.