如果有人给出用例示例来解释以下每个带有Apache flink的Watermark API之间的区别将会很有帮助:
- 定期水印 -
AssignerWithPeriodicWatermarks[T]
- 断点水印 -
AssignerWithPunctuatedWatermarks[T]
如果有人给出用例示例来解释以下每个带有Apache flink的Watermark API之间的区别将会很有帮助:
AssignerWithPeriodicWatermarks[T]
AssignerWithPunctuatedWatermarks[T]
两种水印类型的主要区别在于何时/如何调用getWatermark
方法。
定期水印
对于定期水印,Flink会定期间隔地调用getCurrentWatermark()
,与事件流无关。这个间隔是使用来定义的。
ExecutionConfig.setAutoWatermarkInterval(millis)
当您的水印(即使部分地)取决于处理时间,或者当您需要即使在一段时间内没有收到任何事件/元素时也要发出水印时,请使用此类。
间断性水印
使用间断性水印时,Flink会在每个新事件之后立即调用checkAndGetWatermark()
,即在调用assignWatermark()
之后。仅当checkAndGetWatermark
返回一个非空且大于上一个水印的值时,才会发出实际的水印。
这意味着如果您一段时间内没有收到任何新元素,则不会发出水印。
如果某些特殊元素是标记,表示事件时间已经推进,并且您想要在特定事件时发出水印,请使用此类。例如,您可以在传入流中设置标志,标记序列的结尾。