在apache flink中合并两个流,而不考虑窗口时间

tez616oj  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(409)

我有两个要合并的数据流。问题是一个数据流的频率比另一个高得多,有时一个数据流根本没有接收到事件。是否可以使用一个流中的最后一个事件,并在即将到来的每个事件上将其与另一个流连接起来?
我找到的唯一解决方案是使用join函数,但是必须指定一个公共窗口,在该窗口中可以应用join函数。当一个流未接收到任何事件时,此窗口未到达。
是否有可能对来自一个流或另一个流的每个事件应用join函数,并维护上一次使用的事件的状态,并将此事件用于join函数?
提前谢谢你的建议!

smdncfj3

smdncfj31#

在flink中有许多不同的方法来组合或连接两个流,这取决于每个特定用例的需求。当你“用手”做这件事时,你想用Flink的 ConnectedStream 带着一个 RichCoFlatMapFunction 或者 CoProcessFunction . 其中任何一个都允许您保持托管状态(即,不经常更新的流中的最后一个元素),并将其与更快的流连接起来。协处理函数增加了使用计时器的功能,如果相关的话,您应该使用它来清除过期键的状态。
flink培训站点上有一个关于实现这种连接的不同方法的练习:扩展连接。有关更简单的示例,请参阅关于过期状态的练习。
flink的每个最新版本都包含了额外的内置连接函数,因此在这一点上,很少有必要使用自己的连接函数。有关更多详细信息,请参阅有关连接datastream api、连接表api和连接sql的页面。

相关问题