Flink中allowedLateness详细介绍及思考

默认情况下,当watermark通过end-of-window之后,再有之前的数据到达时,这些数据会被删除。

为了避免有些迟到的数据被删除,因此产生了allowedLateness的概念。

简单来讲,allowedLateness就是针对event time而言,对于watermark超过end-of-window之后,还允许有一段时间(也是以event time来衡量)来等待之前的数据到达,以便再次处理这些数据

 

默认情况下,如果不指定allowedLateness,其值是0,即对于watermark超过end-of-window之后,还有此window的数据到达时,这些数据被删除掉了。

注意:对于trigger是默认的EventTimeTrigger的情况下,allowedLateness会再次触发窗口的计算,而之前触发的数据,会buffer起来,直到watermark超过end-of-window + allowedLateness()的时间,窗口的数据及元数据信息才会被删除。再次计算就是DataFlow模型中的Accumulating(积累)的情况。

https://blog.csdn.net/lmalds/article/details/55259718

面试问题:什么情况下数据会被丢弃或者说不会被计算?

两种情况:

a.未设置allowedLateness情况下,某条数据属于某个窗口,但是watermark超过了窗口的结束时间,则该条数据会被丢弃;

b.设置allowedLateness情况下,某条数据属于某个窗口,但是watermark超过了窗口的结束时间+延迟时间,则该条数据会被丢弃;

 也就是说如果一个key下面的某条数据如果延迟到来太多,就会被丢弃,这个问题无法解决的;

因为其他key的数据会上报就会提高watermark,最后触发窗口计算。

posted @ 2020-03-24 09:01  再见傅里叶  阅读(3860)  评论(0编辑  收藏  举报