水印:个人对于水印的理解,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);该方法用来抽取数据中携带的时间戳,将当前的时间戳返回并更新最大的时间戳。
Flink水印浅记
最新推荐文章于 2024-06-17 11:18:26 发布