Apache Flink 中的周期性水印和标点水印有什么区别?
What is the difference between periodic and punctuated watermarks in Apache Flink?
如果有人给出用例示例来解释每个 Watermark API 与下面给出的 Apache flink 之间的区别,将会很有帮助
- 周期性水印 -
AssignerWithPeriodicWatermarks[T]
- 标点水印 -
AssignerWithPunctuatedWatermarks[T]
两种水印的主要区别是how/when调用了getWatermark
方法。
周期性水印
使用周期性水印,Flink 以 固定间隔 调用 getCurrentWatermark()
,与事件流无关。此间隔使用
定义
ExecutionConfig.setAutoWatermarkInterval(millis)
当您的水印取决于(甚至部分)处理时间时,或者即使一段时间没有收到 event/elements 也需要发出水印时,请使用此 class。
标点水印
使用标点水印,Flink 在每个新事件 上调用 checkAndGetWatermark()
,即在调用 assignWatermark()
之后立即调用。仅当 checkAndGetWatermark
returns 大于最后一个水印的 non-null 值时才会发出实际水印。
这意味着如果您一段时间没有收到任何新元素,则不会发出水印。
如果某些特殊元素充当表示事件时间进度的标记,并且您希望在特定事件中专门发出水印,请使用此 class。例如,您可以在传入流中使用标记标记序列结束的标志。
如果有人给出用例示例来解释每个 Watermark API 与下面给出的 Apache flink 之间的区别,将会很有帮助
- 周期性水印 -
AssignerWithPeriodicWatermarks[T]
- 标点水印 -
AssignerWithPunctuatedWatermarks[T]
两种水印的主要区别是how/when调用了getWatermark
方法。
周期性水印
使用周期性水印,Flink 以 固定间隔 调用 getCurrentWatermark()
,与事件流无关。此间隔使用
ExecutionConfig.setAutoWatermarkInterval(millis)
当您的水印取决于(甚至部分)处理时间时,或者即使一段时间没有收到 event/elements 也需要发出水印时,请使用此 class。
标点水印
使用标点水印,Flink 在每个新事件 上调用 checkAndGetWatermark()
,即在调用 assignWatermark()
之后立即调用。仅当 checkAndGetWatermark
returns 大于最后一个水印的 non-null 值时才会发出实际水印。
这意味着如果您一段时间没有收到任何新元素,则不会发出水印。
如果某些特殊元素充当表示事件时间进度的标记,并且您希望在特定事件中专门发出水印,请使用此 class。例如,您可以在传入流中使用标记标记序列结束的标志。