Flink 中是否可以使用多个 worker 的全局状态?

Bac*_*hrc 5 apache-flink

在 Flink 文档的任何地方,我都看到状态对于地图功能和工作人员来说是独立的。这在独立的方法中似乎很强大,但是如果 Flink 在集群中运行呢?Flink 可以处理所有工作人员都可以添加数据并查询的全局状态吗?

来自 Flink 关于状态的文章:

为了在此设置中实现高吞吐量和低延迟,必须最小化任务之间的网络通信。在 Flink 中,流处理的网络通信只发生在作业算子图中的逻辑边上(垂直),因此流数据可以从上游传输到下游算子。

但是,操作符的并行实例之间没有通信(水平)。为了避免这种网络通信,数据局部性是 Flink 中的一个关键原则,它强烈影响状态的存储和访问方式。

die*_*ico 5

我认为Flink只支持操作符上的状态Keyed流上的状态,如果你需要某种全局状态,你必须将数据存储和恢复到某种数据库/文件系统/共享内存中,并将该数据与你的流混合。

无论如何,根据我的经验,通过良好的处理管道设计并以正确的方式分区数据,在大多数情况下,您应该能够应用分而治之算法或 MapReduce 策略来满足您的需求

如果您在系统中引入某种全局状态,那么该全局状态可能会成为一个很大的瓶颈。所以不惜一切代价尽量避免它。