-
什么是watermark?
watermark对应的中文是水位或水位线,用来判断一批数据是否到达的标识。 -
为什么要有watermark?
在真实的数据传输过程中,数据不一定按照其产生的时间顺序的到达,可能会是乱序的或者是延迟的。对于延迟的数据我们的程序不可能一直等待下去,所以要设置一个最大的等待时间,也就是watermark的概念,当等于watermark(t)的时间戳的数据来了,我们认为小于等于t的数据都已经到了,从而执行数据处理操作。 -
如何使用watermark
当数据都是按顺序到达时,没有必要设置watermark。
但数据的到达有延迟存在时,就有必要使用watermark了。
flink中设置watermark有两种方法:
1.周期性的生成 Periodic
2.根据某些特定事件的发生来生成 Punctuatedflink中提供了两个用于设置watermark的预定义实现类
1.AscendingTimestampExtractor 适用于事件时间递增
2.BoundedOutOfOrdernessTimestampExtractor 适用于乱序但最大延迟时间已知
想深入了解更多关于时间和watermark的知识,可以参考
http://wuchong.me/blog/2018/11/18/flink-tips-watermarks-in-apache-flink-made-easy/这篇网上博文,谢谢。