flink watermark理解

一、watermark三個特點

1、是一條通過自定義函數生成的特殊數據記錄,直接插入到數據流中的。

2、必須單調遞增,因爲watermark是用來表示系統語義上的時間,既然是時間,那麼就必須遞增。

對於亂序數據,怎麼做到單調遞增?

很簡單,就是一直把已有的watermark與新生成watermark的取最大值返回。

3、watermark與數據時間相關,是通過數據流中的數據時間產生的。

 

二、理解watermark

watermark是一個插入到數據流中的記錄(自己寫函數生成),生成的watermark通常是對時間戳的包裝(即系統語義時間)。

作用:提示根據watermark判斷窗口的桶是否觸發關閉。

比如窗口時間間隔是5,那麼會存在0~5、6~10、11~15等桶。

0~5的桶會把數據中時間在0~5之間的數據放入該桶。但桶的關閉是通過watermark的時間來判斷,當watermark的時間大於5時,那麼0~5這個桶(窗口)就會關閉,觸發窗口聚合函數等操作。如果watermark一直小於5,0~5的桶就一直不會關閉,那麼在桶未關閉的時候,數據流中數據的時間如果在0~5之間,那麼這些數據就會放入0~5的桶中,直到watermark大於5觸發0~5的桶關閉聚合操作爲止。

 

所以,如果我們在定義生成watermark的函數中,如果把每次生成的watermark時間減去n,那麼就會使得每個桶多等待n的時間,如果在這多等待的n時間內,還有屬於0~5時間的數據過來,那麼還會放入0~5這個桶中。

 

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

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