作者:大美女雪梨醒目 | 来源:互联网 | 2023-01-20 12:13
我有两个想要组合的数据流.问题是一个数据流的频率比另一个高得多,并且有时一个流根本没有接收事件.是否可以使用来自一个流的最后一个事件,并在即将到来的每个事件上将其与另一个流连接?
我找到的唯一解决方案是使用join函数,但您必须指定一个公共窗口,您可以在其中应用join函数.当一个流没有接收到任何事件时,这是未达到的窗口.
是否有可能对来自任何一个流或另一个流的每个事件应用join函数并维护上次使用的事件的状态并将此事件用于join函数?
提前感谢任何有用的提示!
1> David Anders..:
根据每个特定用例的要求,在Flink中组合或连接两个流有许多不同的方法.当这样做"手",你想使用弗林克的ConnectedStream
s的一个RichCoFlatMapFunction
或CoProcessFunction
.这些中的任何一个都将允许您保持托管状态(即不经常更新的流中的最后一个元素),并将其与更快的流连接.CoProcessFunction增加了使用定时器的功能,如果相关,则应该使用它来清除过期密钥的状态.
Flink培训网站上有关于实施此类连接的不同方法的练习:Enrichment Joins.有关更简单的示例,请参阅有关" 到期状态"的练习.
每个最近发布的Flink都包含了额外的内置连接功能,因此在这一点上不需要自己动手.有关更多详细信息,请参阅有关使用DataStream API加入的页面,与Table API 连接以及加入SQL.