如果有人给出用例来解释下面给出的每个Watermark API与Apache flink之间的区别,将会有所帮助
AssignerWithPeriodicWatermarks[T]
AssignerWithPunctuatedWatermarks[T]
答案 0 :(得分:10)
两种类型的水印之间的主要区别在于如何/何时调用getWatermark
方法。
定期水印
对于定期水印,Flink以常规间隔调用getCurrentWatermark()
,与事件流无关。此间隔使用
ExecutionConfig.setAutoWatermarkInterval(millis)
当水印依赖(甚至部分)处理时间时,或者即使没有收到任何事件/元素,也需要发出水印时,请使用此类。
标点符号
使用标点符号,Flink会在每个新事件上调用checkAndGetWatermark()
,即在调用assignWatermark()
后立即调用。仅当checkAndGetWatermark
返回大于最后一个水印的非空值时才会发出实际水印。
这意味着如果您暂时没有收到任何新元素,则不会发出水印。
如果某些特殊元素充当表示事件时间进度的标记,并且您希望在特定事件中专门发出水印,则使用此类。例如,您可以在传入流中标记标记序列结尾的标记。