Apache flink 我的Flink应用程序需要水印吗?如果没有,我是否需要水印策略.noWatermarks?

Apache flink 我的Flink应用程序需要水印吗?如果没有,我是否需要水印策略.noWatermarks?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我不确定我的Flink应用程序是否需要水印。什么时候有必要 如果我不需要它们,WatermarkStrategy.noWatermarks()?时间t的水印标记数据流中的一个位置,并断言此时流在时间t之前已经完成 水印的唯一作用是触发基于事件时间的计时器的触发 基于事件时间的计时器由KeyedProcessFunctionAPI直接公开,也由内部使用 事件时间窗口 CEP(模式匹配)库,如果您指定要执行基于事件时间的处理,它将使用水印对传入流进行排序 Flink SQL,同样仅在执行基于事件时

我不确定我的Flink应用程序是否需要水印。什么时候有必要

如果我不需要它们,
WatermarkStrategy.noWatermarks()

时间t的水印标记数据流中的一个位置,并断言此时流在时间t之前已经完成

水印的唯一作用是触发基于事件时间的计时器的触发

基于事件时间的计时器由
KeyedProcessFunction
API直接公开,也由内部使用

  • 事件时间窗口
  • CEP(模式匹配)库,如果您指定要执行基于事件时间的处理,它将使用水印对传入流进行排序
  • Flink SQL,同样仅在执行基于事件时间的处理时使用:例如,ORDER BY、版本表联接、windows、MATCH_识别等
不需要水印的常见情况包括仅依赖于处理时间的应用程序,或者在执行批处理时。或者在处理具有时间戳但从不依赖事件时间计时器的数据时(例如,简单的逐事件处理)

FLIP-27引入的Flink新的源代码接口确实需要
水印策略

env.fromSource(source、水印策略、sourceName);
如果您实际上不需要水印,可以在此界面中使用
WatermarkStrategy.noWatermarks()