Apache Flink中定期和间断水印有什么区别?

时间:2017-01-23 14:55:34

标签: apache-flink flink-streaming

如果有人给出用例来解释下面给出的每个Watermark API与Apache flink之间的区别,将会有所帮助

  • 定期水印 - AssignerWithPeriodicWatermarks[T]
  • 标点符号 - AssignerWithPunctuatedWatermarks[T]

1 个答案:

答案 0 :(得分:10)

两种类型的水印之间的主要区别在于如何/何时调用getWatermark方法。

定期水印

对于定期水印,Flink以常规间隔调用getCurrentWatermark(),与事件流无关。此间隔使用

定义
ExecutionConfig.setAutoWatermarkInterval(millis)

当水印依赖(甚至部分)处理时间时,或者即使没有收到任何事件/元素,也需要发出水印时,请使用此类。

标点符号

使用标点符号,Flink会在每个新事件上调用checkAndGetWatermark() ,即在调用assignWatermark()后立即调用。仅当checkAndGetWatermark返回大于最后一个水印的非空值时才会发出实际水印。

这意味着如果您暂时没有收到任何新元素,则不会发出水印。

如果某些特殊元素充当表示事件时间进度的标记,并且您希望在特定事件中专门发出水印,则使用此类。例如,您可以在传入流中标记标记序列结尾的标记。