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

6

Apache Spark声称其操作符(节点)是“无状态的”。这使得Spark的架构可以使用更简单的协议来处理恢复、负载平衡和处理滞后者等问题。

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

这里发生了什么?Spark不是真正的无状态系统吗?或者Flink声称状态对于机器学习和类似应用程序是必需的是不正确的吗?还是这里有一些额外的细微差别?

我感觉我没有真正理解“有状态”和“无状态”系统之间的区别,如果可以解释一下就好了。

1个回答

5

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

这是什么意思?假设我想对已到达流应用程序的所有单词进行计数。但是,流式处理的本质是数据在管道中流入和流出。为了能够访问先前的数据,在此示例中,需要访问一种包含流中先前单词数量的映射,必须访问一些已累积的状态

虽然Spark的RDD操作符中有一些是无状态的,例如mapfilter等,但它确实以mapWithState形式公开了有状态的操作符。不仅如此,在名为“Structured Streaming”的新Spark流架构中,状态内置于管道中,并且大多数情况下从用户那里抽象出来,以便能够公开聚合操作符,例如agg


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接