首先我们需要知道
当Flink以Event Time(事件时间) 模式处理数据时。Flink会以处理的数据自身所带的时间戳来对代码中基于时间的算子进行逻辑和计算。WaterMark为单调递增的一个特殊的数据
- 定义一条数据流
定义窗口和WaterMark
第一条数据
第二条数据
第三条数据
第四条数据
第五条数据
第六条数据
第七条数据
第八条数据
第九条数据
第十条数据
第十一条数据
第十二条数据
第十四条数据
通过暴力的画图已经有了一个比较清晰的了解了对于WaterMark的工作原理。
而我刚开始定义的延迟时间为3秒,是以数据的最大乱序时间差定义的。
合理定义WaterMark的延迟时间,是能够很好的减少对数据的丢失,对迟到数据的等待及窗口因为长时间等待迟到数据未释放资源等问题。
总结 : Watermark可以理解成一个延迟触发机制,我们可以设置Watermark的延时时长t,每次系统会校验已经到达的数据中最大的maxEventTime,然后认定eventTime小于maxEventTime - t的所有数据都已经到达,如果有窗口的停止时间等于maxEventTime – t,那么这个窗口被触发执行。



