微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flink水印浅记

水印:个人对于水印的理解,waterMark触发窗口函数执行的判定条件,可以看作对每一个数据的处理时间进行延时,但真正的机制是通过控制窗口函数的触发时间来处理延时数据。
1 def assignTimestampsAndWatermarks(
assigner: AssignerWithPeriodicWatermarks[T]):DataStream[T] = {
asScalaStream(stream.assignTimestampsAndWatermarks(assigner))
}
方法顾名思义就是分配dataStream的时间戳和水印,使用时需要传递AssignerWithPeriodicWatermarks的实现。
2 AssignerWithPeriodicWatermarks
他的实现主要是实现了两个抽象方法
1):Watermark getCurrentWatermark();该方法用来获取水印,在该方法中我们可以获取当前所有数据中最大的时间戳,然后减去我们设置的延时时间,然后将使用计算后的时间来生成水印。
2):long extractTimestamp(T element, long prevIoUsElementTimestamp);该方法用来抽取数据中携带的时间戳,将当前的时间戳返回并更新最大的时间戳。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐