flink 關閉窗口(watermark、allowedLateness允許延遲)

一、watermark

介紹在這篇文章https://blog.csdn.net/qq_36951116/article/details/106468171

如果只配置了watermark,沒有設置allowedLateness。

當watermark的時間戳大於等於窗口的結束時間時,會觸發計算輸出一次結果(如果1是全量計算則觸發,增量的就不用觸發了),然後關閉窗口(清空狀態值)

比如設置了watermark延遲時間爲3000毫秒,以窗口0~5000毫秒爲例,窗口結束時間爲5000毫秒

可知watermark=eventTime-3000,

那麼當watermark>= 5000時(即evenTime>=3000+5000),窗口0~5000毫秒會被關閉且觸發計算。

 

二、調用allowedLateness方法設置了延遲時間

當調用allowedLateness方法設置了允許延遲時間,

如果watermark的時間戳大於等於窗口的結束時間時,不會像第一中一樣關閉窗口清空轉態,僅僅只會觸發一次計算,並且計算結果繼續保存爲狀態,

然後如果接下來watermark還沒有超過窗口結束時間+允許延遲時間時,那麼此時每來一條符合窗口的記錄,則觸發一次計算輸出。並且把該輸出作爲對應key的新的狀態。直到watermark超過爲止。

比如設置了watermark延遲時間爲3000毫秒,allowedLateness允許延遲時間爲10000毫秒,以窗口0~5000毫秒爲例,窗口結束時間爲5000毫秒

可知watermark=eventTime-3000,

那麼當watermark>= 5000時(即evenTime>=3000+5000),窗口0~5000毫秒會被觸發計算輸出一次結果,然後該結果會保存爲一個狀態,後面繼續使用(累加等)。

那麼當此時watermark>=5000,且watermark<5000+10000時(即未超出允許延遲時間範圍),後續flink的輸入數據中又來了一堆eventTime在0~5000毫秒之間的數據,此時每來一條數據,則觸發一次計算(比如累加,那麼就會與之前保存的狀態進行累加計算,全量計算的話應該是留到關窗時才計算),

直到當watermark>= 5000+10000時(即evenTime>=3000+5000+10000),窗口0~5000毫秒會被關閉並觸發計算

 

三、注意

watermark只與窗口關窗先關時間進行比較,至於窗口開窗時間,還是以eventTime的時間來開啓的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章