[In A Word]In A Word章10 Flink Window的Watermarks和allowedLateness的区别

Watermartks是通过additional的时间戳来控制窗口激活的时间,allowedLateness来控制窗口的销毁时间。    

1. 一条记录的事件时间来控制此条记录属于哪一个窗口,Watermarks来控制这个窗口什么时候激活。

   
2. 假如一个窗口时间为00:00:00~00:00:05,Watermarks为5秒,那么当flink收到事件事件为00:00:10秒的数据时,即Watermarks到达00:00:05,激活这个窗口。
 
 
3. Watermarks激活窗口的方式,官方文档推荐为复写AssignerWithPeriodicWatermarks
 
4. 或者也可以使用我们项目中已经用到的在env级别下的config中设置watermark的方式
 
     env.getConfig().setAutoWatermarkInterval(applConfig.getWatermarkInterval());
 
 
当窗口被激活且运行完毕以后,此时这个窗口不一定被销毁,窗口状态有可能会被继续保持,这一点取决于allowedLateness

  

5.假如设置allowedLateness为60秒,那么窗口的状态会一直保持到事件时间为00:01:05的数据到达,或者如果最后一条数据早于00:01:05秒,则等到最后一条数据到达后再等待此数据于00:01:05的差值时间。    
 
 
6.在窗口被销毁前,可以通过一些方式再次激活。注意,allowedLateness只能控制窗口销毁行为,并不能控制窗口再次激活的行为,这是独立的两部分行为。
 
7. 官方文档推荐的方式为Getting late data as a side output,可以单独获得再次被激活的窗口流

猜你喜欢

转载自www.cnblogs.com/szss/p/11464955.html