Flink---WaterMark機制
阿新 • • 發佈:2019-01-06
背景
使用Event time時間模型時,由於網路或傳輸等原因,事件被Flink處理的順序不一定是事件產生的順序(亂序),可能會存在兩方面影響:
- 當前視窗不知道何時停止,開始計算結果;
- 影響視窗計算結果的準確性,見示例;
WaterMark機制
WaterMark本質上是一個帶有時間戳的特殊event,當Flink中的運算子接收到水印時,它明白(假設)它不會看到比該時間戳更早的訊息。
A Watermark(t) declares that event time has reached time t in that stream, meaning that there should be no more elements from the stream with a timestamp t’ <= t (i.e. events with timestamps older or equal to the watermark).It can then safely compute and emit the result of the window
生成WaterMark
WaterMark需要開發人員根據具體的場景採取合適的策略生成;
生成方式:
- 資料來源中產生;
- 在Flink入口處生成( Watermark Generators);
併發WaterMark
場景:一個operator存在多個輸入流,可能同時收到多個WaterMark;
處理原則:使用時間戳最小的WaterMark更新當前視窗的Event time,這意味著視窗會等待所有的輸入流資料到達才會開始計算;
參考: