默認情況下,當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,最后觸發窗口計算。