我不确定我的flink应用程序是否真的需要水印。什么时候有必要?如果我不需要它们,我的目的是什么 WatermarkStrategy.noWatermarks() ?
WatermarkStrategy.noWatermarks()
6vl6ewon1#
时间t的水印标记了数据流中的一个位置,并Assert在该点上,流现在在时间t之前是完整的。水印服务的唯一目的是触发基于事件时间的计时器的触发。基于事件时间的计时器由 KeyedProcessFunction api,也由内部使用事件时间窗口cep(模式匹配)库,如果指定要进行基于事件时间的处理,它将使用水印对传入流进行排序flink sql,同样仅在执行基于事件时间的处理时使用:例如,order by、版本表联接、windows、match\u recognize等。不需要水印的常见情况包括仅依赖于处理时间的应用程序,或者在执行批处理时。或者在处理具有时间戳但从不依赖事件时间计时器的数据时(例如,简单的逐个事件处理)。flip-27引入的flink的新源接口确实需要 WatermarkStrategy :
KeyedProcessFunction
WatermarkStrategy
env.fromSource(source, watermarkStrategy, sourceName);
在不需要水印的情况下,可以使用 WatermarkStrategy.noWatermarks() 在这个界面中。
1条答案
按热度按时间6vl6ewon1#
时间t的水印标记了数据流中的一个位置,并Assert在该点上,流现在在时间t之前是完整的。
水印服务的唯一目的是触发基于事件时间的计时器的触发。
基于事件时间的计时器由
KeyedProcessFunction
api,也由内部使用事件时间窗口
cep(模式匹配)库,如果指定要进行基于事件时间的处理,它将使用水印对传入流进行排序
flink sql,同样仅在执行基于事件时间的处理时使用:例如,order by、版本表联接、windows、match\u recognize等。
不需要水印的常见情况包括仅依赖于处理时间的应用程序,或者在执行批处理时。或者在处理具有时间戳但从不依赖事件时间计时器的数据时(例如,简单的逐个事件处理)。
flip-27引入的flink的新源接口确实需要
WatermarkStrategy
:在不需要水印的情况下,可以使用
WatermarkStrategy.noWatermarks()
在这个界面中。