如何在 flink 流作业中将一个繁忙的流与多个非常小的流连接在一起

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

如果我有一个称为事件的流。

事件有对系统和类型的引用。

然后我有一个名为 system 的流和一个名为 eventType 的流。

在我的最终结果中,我需要所有三个的数据。

在我的用例中它是必需的。如果系统或事件类型更新,我必须重新处理所有事件,以便最终结果得到更新。

现在我的事件流有大量的事件,而我的系统和事件类型却很少。假设每个 100 个。

有没有办法在 flink 中加入这些内容,我只能迭代一次事件流,并且在我加入的函数中我想加入其他两个流。

我研究了广播小流,但如果我这样做,那么流程元素上下文是只读的(BroadcastProcessFunction),所以我无法将事件添加到状态中,并且如果我获得系统或 eventType 流的更新,这种方式会重新处理它们。

我的替代方案是首先通过将事件流与系统流连接来迭代事件流并使用 RichCoFlatMapFunction。 然后迭代生成的流并使用相同的功能,但现在加入 eventType 流。

我不喜欢这里的是我将使用两个进程中的事件构建状态。

我希望有一种更聪明的方法来做到这一点。

apache-flink
1个回答
0
投票

也许您以过于严格的方式解释了对只读上下文的限制。它的工作原理是这样的:

  • 处理传入的广播消息时,您可以读写广播状态,并迭代并读取所有键的键分区状态。这将允许您重新发出因系统或事件类型更新而应更新的任何结果。

  • 处理传入的键分区消息时,您可以读取和写入该特定键的键分区状态,并读取广播状态。

这应该可以满足您实施广播加入的需求。

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