无论窗口时间如何,都可以在Apache Flink中组合两个流

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无论窗口时间如何,都可以在Apache Flink中组合两个流相关的知识,希望对你有一定的参考价值。

我有两个想要组合的数据流。问题是一个数据流的频率比另一个高得多,并且有时一个流根本没有接收事件。是否可以使用来自一个流的最后一个事件,并在即将到来的每个事件上将其与另一个流连接?

我找到的唯一解决方案是使用join函数,但您必须指定一个公共窗口,您可以在其中应用join函数。当一个流没有接收到任何事件时,这是未达到的窗口。

是否有可能对来自任何一个流或另一个流的每个事件应用join函数并维护上次使用的事件的状态并将此事件用于join函数?

提前感谢任何有用的提示!

答案

根据每个特定用例的要求,在Flink中组合或连接两个流有许多不同的方法。当“手动”执行此操作时,您希望使用Flink的ConnectedStreams与RichCoFlatMapFunctionCoProcessFunction。这些中的任何一个都将允许您保持托管状态(即来自不经常更新的流的最后一个元素),并将其与更快的流连接。 CoProcessFunction增加了使用定时器的功能,如果相关,则应该使用它来清除过期密钥的状态。

Flink培训网站上有关于实施此类连接的不同方法的练习:Enrichment Joins。有关更简单的示例,请参阅有关Expiring State的练习。

每个最近发布的Flink都包含了额外的内置连接功能,因此在这一点上不需要自己动手。有关详细信息,请参阅joining with the DataStream APIjoins with the Table APIjoins in SQL上的页面。

以上是关于无论窗口时间如何,都可以在Apache Flink中组合两个流的主要内容,如果未能解决你的问题,请参考以下文章

apache flink窗口顺序

Apache Flink 两种类型的窗口,时间和“计数”窗口

Flink---窗口函数

Flink---窗口函数

Flink---窗口函数

Apache Flink CEP如何检测事件是不是在x秒内没有发生?