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

问题描述 投票:3回答:1

Apache Spark吹嘘它的运营商(节点)是“无国籍的”。这使得Spark的架构可以使用更简单的协议来处理恢复,负载平衡和处理落后者等问题。

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

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

我不觉得我真正理解“有状态”系统和“无状态”系统之间的区别,如果可以解释它们,我将不胜感激。

apache-spark streaming spark-streaming state apache-flink
1个回答
2
投票

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

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

虽然一些Sparks RDD运算符是无状态的,例如mapfilter等,但确实以mapWithState的形式公开了有状态运算符。不仅如此,在新的Spark流式架构中,称为“结构化流式传输”,状态内置于管道中,并且主要是从用户中抽象出来,以便能够公开聚合运算符,例如agg

© www.soinside.com 2019 - 2024. All rights reserved.