“有状态”和“无状态”系统有什么区别?

Shu*_*wag 5 streaming state apache-spark spark-streaming apache-flink

Apache Spark吹嘘其运营商(节点)是“无状态的”。这允许 Spark 的架构使用更简单的协议来处理诸如恢复、负载平衡和处理落后者之类的事情。

另一方面,Apache Flink将其运算符描述为“有状态的”,并声称有状态对于机器学习等应用程序是必要的。然而,Spark 程序能够在不维护“状态”的情况下传递信息并在 RDD 中维护应用程序数据。

这里发生了什么?Spark 不是真正的无状态系统吗?或者 Flink 断言状态性对于机器学习和类似应用程序至关重要?还是这里有一些额外的细微差别?

我觉得我并没有真正理解“有状态”和“无状态”系统之间的区别,如果能解释一下,我将不胜感激。

Yuv*_*kov 5

状态属性是指能够在当前时间点访问前一个时间点的数据。

这是什么意思?假设我想对到达我的流媒体应用程序的所有单词进行字数统计。但是流的本质是数据流入和流出管道。为了能够访问以前的数据,在这个例子中,某种映射保存了流中以前的单词数,我必须访问一些累积的状态

虽然一些火花RDD运营商是无状态的,如mapfilter等,但它的形式暴露状态运营mapWithState。不仅如此,在新的 Spark 流架构中,称为“结构化流”,状态被内置到管道中,并且大部分都从用户那里抽象出来,以便能够公开聚合运算符,例如agg.