1. 程式人生 > 其它 >Flink時間語義

Flink時間語義

Event Time

指的是資料流中每個元素或者每個事件自帶的時間屬性,一般是事件發生的時間

由於延遲有可能一個較早完成的事件晚一些到達,在開窗的時候我們不可能一直等待視窗內應該到達的所有資料

在實際應用中,當涉及到對事件按照時間視窗進行統計時,Flink會將視窗內的事件快取下來,直到接受到一個Watermark

如何使用:

  1. 使用Event Time作為時間戳
  2. 生成Watermark

Watermark:在開窗接受資料的時候,Flink會等待一個有限的時間,假設在這之後不會有更晚的資料到達。

在一定程度上降低了計算結果的絕對準確性,且增加了系統的延遲

優點:

  1. 某個事件的時間是確定的,保證計算結果在一定程度上的可預測性

缺點:

  1. 快取較大,增加了延遲,除錯和定位問題更復雜

Processing Time

指的是,運算元使用當前機器的系統時鐘時間

無視事件本身的時間屬性,只要該事件在某個時間段到達了某個運算元,就會被歸結到該視窗下

優點:

  1. 只依賴當前執行機器的系統時鐘,不需要依賴Watermark
  2. 無需快取
  3. 實現簡單,延遲最小

缺點:

不同環境下時間視窗的計算結果會發生變化,所以Processing Time在時間視窗下的計算會有不確定性

Ingestion Time

Ingestion Time是事件到達Flink Source的時間。從Source到下游各個運算元中間可能有很多計算環節,任何一個運算元的處理速度快慢可能影響到下游運算元的Processing Time。而Ingestion Time定義的是資料流最早進入Flink的時間,因此不會被運算元處理速度影響。

Ingestion Time通常是Event Time和Processing Time之間的一個折中方案。比起Event Time,Ingestion Time可以不需要設定複雜的Watermark,因此也不需要太多快取,延遲較低。比起Processing Time,Ingestion Time的時間是Source賦值的,一個事件在整個處理過程從頭至尾都使用這個時間,而且後續運算元不受前序運算元處理速度的影響,計算結果相對準確一些,但計算成本比Processing Time稍高。

Flink的時間語義 | Weizheng (lulaoshi.info)