我有两个要合并的数据流。问题是一个数据流的频率比另一个高得多,有时一个数据流根本没有接收到事件。是否可以使用一个流中的最后一个事件,并在即将到来的每个事件上将其与另一个流连接起来?我找到的唯一解决方案是使用join函数,但是必须指定一个公共窗口,在该窗口中可以应用join函数。当一个流未接收到任何事件时,此窗口未到达。是否有可能对来自一个流或另一个流的每个事件应用join函数,并维护上一次使用的事件的状态,并将此事件用于join函数?提前谢谢你的建议!
smdncfj31#
在flink中有许多不同的方法来组合或连接两个流,这取决于每个特定用例的需求。当你“用手”做这件事时,你想用Flink的 ConnectedStream 带着一个 RichCoFlatMapFunction 或者 CoProcessFunction . 其中任何一个都允许您保持托管状态(即,不经常更新的流中的最后一个元素),并将其与更快的流连接起来。协处理函数增加了使用计时器的功能,如果相关的话,您应该使用它来清除过期键的状态。flink培训站点上有一个关于实现这种连接的不同方法的练习:扩展连接。有关更简单的示例,请参阅关于过期状态的练习。flink的每个最新版本都包含了额外的内置连接函数,因此在这一点上,很少有必要使用自己的连接函数。有关更多详细信息,请参阅有关连接datastream api、连接表api和连接sql的页面。
ConnectedStream
RichCoFlatMapFunction
CoProcessFunction
1条答案
按热度按时间smdncfj31#
在flink中有许多不同的方法来组合或连接两个流,这取决于每个特定用例的需求。当你“用手”做这件事时,你想用Flink的
ConnectedStream
带着一个RichCoFlatMapFunction
或者CoProcessFunction
. 其中任何一个都允许您保持托管状态(即,不经常更新的流中的最后一个元素),并将其与更快的流连接起来。协处理函数增加了使用计时器的功能,如果相关的话,您应该使用它来清除过期键的状态。flink培训站点上有一个关于实现这种连接的不同方法的练习:扩展连接。有关更简单的示例,请参阅关于过期状态的练习。
flink的每个最新版本都包含了额外的内置连接函数,因此在这一点上,很少有必要使用自己的连接函数。有关更多详细信息,请参阅有关连接datastream api、连接表api和连接sql的页面。