无论窗口时间如何,都可以在Apache Flink中组合两个流
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无论窗口时间如何,都可以在Apache Flink中组合两个流相关的知识,希望对你有一定的参考价值。
我有两个想要组合的数据流。问题是一个数据流的频率比另一个高得多,并且有时一个流根本没有接收事件。是否可以使用来自一个流的最后一个事件,并在即将到来的每个事件上将其与另一个流连接?
我找到的唯一解决方案是使用join函数,但您必须指定一个公共窗口,您可以在其中应用join函数。当一个流没有接收到任何事件时,这是未达到的窗口。
是否有可能对来自任何一个流或另一个流的每个事件应用join函数并维护上次使用的事件的状态并将此事件用于join函数?
提前感谢任何有用的提示!
根据每个特定用例的要求,在Flink中组合或连接两个流有许多不同的方法。当“手动”执行此操作时,您希望使用Flink的ConnectedStream
s与RichCoFlatMapFunction
或CoProcessFunction
。这些中的任何一个都将允许您保持托管状态(即来自不经常更新的流的最后一个元素),并将其与更快的流连接。 CoProcessFunction增加了使用定时器的功能,如果相关,则应该使用它来清除过期密钥的状态。
Flink培训网站上有关于实施此类连接的不同方法的练习:Enrichment Joins。有关更简单的示例,请参阅有关Expiring State的练习。
每个最近发布的Flink都包含了额外的内置连接功能,因此在这一点上不需要自己动手。有关详细信息,请参阅joining with the DataStream API,joins with the Table API和joins in SQL上的页面。
以上是关于无论窗口时间如何,都可以在Apache Flink中组合两个流的主要内容,如果未能解决你的问题,请参考以下文章