Apache Flink中周期性和间歇性水印有什么区别?

8

如果有人给出用例示例来解释以下每个带有Apache flink的Watermark API之间的区别将会很有帮助:

  • 定期水印 - AssignerWithPeriodicWatermarks[T]
  • 断点水印 - AssignerWithPunctuatedWatermarks[T]
1个回答

14

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

定期水印

对于定期水印,Flink会定期间隔地调用getCurrentWatermark(),与事件流无关。这个间隔是使用来定义的。

ExecutionConfig.setAutoWatermarkInterval(millis)

当您的水印(即使部分地)取决于处理时间,或者当您需要即使在一段时间内没有收到任何事件/元素时也要发出水印时,请使用此类。

间断性水印

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

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

如果某些特殊元素是标记,表示事件时间已经推进,并且您想要在特定事件时发出水印,请使用此类。例如,您可以在传入流中设置标志,标记序列的结尾。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接