Watermark(水位線)


數據產生時是有序的,但是考慮到網絡延遲,它們到達Flink時,有可能時亂序的,先發生的事件延時到達。為了解決事件延時到達(或者說減少延時數據對計算結果的影響),有了watermark機制。

watermark有個參數允許延遲時間,舉例:
窗口大小=10s,允許延遲時間=5s。

當事件時間>=10:08:08 00:00:10的事件到時,Flink不認為事件時間=[10:08:08 00:00:00, 10:08:08 00:00:10)事件都到了。
當事件時間>=10:08:08 00:00:15的事件到時,Flink會認為事件時間=[10:08:08 00:00:00, 10:08:08 00:00:10)事件都到了(雖然有可能還有數據沒到,但是不等那些了)。
注意上面我用的左閉右開,但是根據Flink官網文檔理解,10:08:08 00:00:10這個事件也到了。但是窗口計算左閉右開。
在Flink中,watermark是一種特殊的事件,它只包含時間戳,它被安插在數據流中。
如下圖:
三角形的事件5到時,Flink不會認為<5的事件都到了,當到圓形watermark5時,才認為<5的事件都到了。
這時延時到達的事件3會被在窗口中計算,但是事件4遲遲沒來,就不等了,事件4就被丟棄了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM