Apache flink 使用边输出共享运算符子任务状态
我正在实现一个流式应用程序,其中一个有状态的操作员正在尝试捕获“owner has items”关系。每个所有者键入的状态由所有者和每个项目的详细信息组成。项目的所有权可以更改,我希望能够将每个项目与其正确的所有者关联。由于不同所有者的操作员状态可能位于不同的子任务中,并且这些子任务旨在独立运行,因此我想知道共享状态的最佳方式是什么。我能够想到的一个解决方案是从子任务的侧面输出创建一个键控数据流,并将其发送给正确的所有者,然后从原始所有者清除状态。基本上:Apache flink 使用边输出共享运算符子任务状态,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我正在实现一个流式应用程序,其中一个有状态的操作员正在尝试捕获“owner has items”关系。每个所有者键入的状态由所有者和每个项目的详细信息组成。项目的所有权可以更改,我希望能够将每个项目与其正确的所有者关联。由于不同所有者的操作员状态可能位于不同的子任务中,并且这些子任务旨在独立运行,因此我想知道共享状态的最佳方式是什么。我能够想到的一个解决方案是从子任务的侧面输出创建一个键控数据流,并将其发送给正确的所有者,然后从原始所有者清除状态。基本上: 子任务K1,状态为关于具有Item1、
另一种方法可能是获取第一个子任务的输出并将其反馈给同一个操作符。理论上,这两种方法都违反了flink作业是DAG的属性,尽管在我的用例中,永远不会有循环数据传输 您的方案将在拓扑中创建一个循环,因为您需要将事件从侧面输出发送回同一操作符的相同/不同子任务 实际上,您需要的是在Flink中支持多键/多状态事务。Flink本身并没有现成的支持。不过,Flink提供了在其上构建此类功能所需的所有工具。事实上,政府正是这样做的。它允许您在Flink的基础上使用一次处理保证来执行多状态事务