1. 程式人生 > >Flink---WaterMark機制

Flink---WaterMark機制

背景

 使用Event time時間模型時,由於網路或傳輸等原因,事件被Flink處理的順序不一定是事件產生的順序(亂序),可能會存在兩方面影響:

  1. 當前視窗不知道何時停止,開始計算結果;
  2. 影響視窗計算結果的準確性,見示例

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需要開發人員根據具體的場景採取合適的策略生成;

生成方式:

  1. 資料來源中產生;
  2. 在Flink入口處生成( Watermark Generators);

併發WaterMark

場景:一個operator存在多個輸入流,可能同時收到多個WaterMark;
處理原則:使用時間戳最小的WaterMark更新當前視窗的Event time,這意味著視窗會等待所有的輸入流資料到達才會開始計算;
在這裡插入圖片描述
參考:

  1. 雲邪部落格:http://wuchong.me/blog/2018/11/18/flink-tips-watermarks-in-apache-flink-made-easy/
  2. 官網:https://ci.apache.org/projects/flink/flink-docs-release-1.7/dev/event_time.html
  3. https://blog.csdn.net/u013560925/article/details/82499612