我的flink应用程序需要水印吗?如果没有,我需要水印策略吗?

w8biq8rn  于 2021-07-15  发布在  Flink
关注(0)|答案(1)|浏览(644)

我不确定我的flink应用程序是否真的需要水印。什么时候有必要?
如果我不需要它们,我的目的是什么 WatermarkStrategy.noWatermarks() ?

6vl6ewon

6vl6ewon1#

时间t的水印标记了数据流中的一个位置,并Assert在该点上,流现在在时间t之前是完整的。
水印服务的唯一目的是触发基于事件时间的计时器的触发。
基于事件时间的计时器由 KeyedProcessFunction api,也由内部使用
事件时间窗口
cep(模式匹配)库,如果指定要进行基于事件时间的处理,它将使用水印对传入流进行排序
flink sql,同样仅在执行基于事件时间的处理时使用:例如,order by、版本表联接、windows、match\u recognize等。
不需要水印的常见情况包括仅依赖于处理时间的应用程序,或者在执行批处理时。或者在处理具有时间戳但从不依赖事件时间计时器的数据时(例如,简单的逐个事件处理)。
flip-27引入的flink的新源接口确实需要 WatermarkStrategy :

env.fromSource(source, watermarkStrategy, sourceName);

在不需要水印的情况下,可以使用 WatermarkStrategy.noWatermarks() 在这个界面中。

相关问题