Flink:处理数据早于应用程序水印的键控流 [英] Flink : Handling Keyed Streams with data older than application watermark

查看:8
本文介绍了Flink:处理数据早于应用程序水印的键控流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用带有动态源和事件时间键窗口的Flink。应用程序将监听实时数据流、开窗口(事件时间窗口)并处理每个键控流。我还有另一个用例,其中我还需要能够支持对某些密钥流(这些密钥流将是带有事件时间和水印的新密钥流)回填较旧的数据。

鉴于我使用的是Watermark,这会带来问题,因为Flink不支持每个密钥的水印。因此,任何用于回填的键控流最终都将被忽略,因为此流的事件时间将是由实况流维护的<;应用程序水印。

我还提出过其他类似的问题,但无法找到可能的方法。 以下是我正在考虑的可能方法,但仍有一些有待解决的问题。

可能的方法-1

(I)保存一份申请书副本,专门用于回填。回填工作很少发生(一个月几次)。发送到应用副本的数据流将具有用于在流中开始和停止的指示符。利用这一点,我计划启动/重置水印。 有没有悬而未决的问题?是否可以使用流中的指示器重置水印?我知道这不是最佳做法,但想不出替代解决方案。

跟进至:Clear Flink watermark state in DataStream[未提供最终解决方案。]

可能的方法-2 每个关键字都有并行实例,因为每个任务都可能有不同的水印。->;不执行此操作,因为我将使用>;5k键控流。

如果需要任何其他详细信息,请告诉我。

推荐答案

您可以通过在批处理执行模式下运行回填作业来解决此问题。当数据流API以批处理模式操作时,输入是有界的(有限的),并且预先知道。这使得Flink可以按键和时间戳对输入进行排序,处理将根据事件时间正确进行,而不会考虑水印或延迟事件。

这篇关于Flink:处理数据早于应用程序水印的键控流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆