Flink中有哪些時間型別,請詳細介紹它們的不同點?

Flink 中的時間和其他流式計算系統的時間一樣分為三類:事件生成時間(Event Time)、事件處理時間(Processing Time)和事件接入時間(Ingestion Time),下面我們將分別介紹這3種時間的概念。

事件生成時間(Event Time)

事件生成時間是資料流中事件實際發生的時間,它以附加在資料流中事件生成的時間戳為依據。這些時間戳通常在事件資料進入流處理管道之前就已經有了。如圖1-1 所示,

即便事件有延遲,事件生成時間視窗也能準確地將事件分配到視窗中

,從而反映出真實發生的情況。也就是說,無論資料流的處理速度如何、事件到達Flink運算元的順序是否會亂,最終生成的結果都是一樣的。

Flink中有哪些時間型別,請詳細介紹它們的不同點?

圖1-1 事件生成時間

事件處理時間(Processing Time)

事件處理時間是當前流處理運算元所在機器上的本地時鐘時間。基於處理時間的視窗會包含那些恰好在一段時間內到達視窗運算元的事件,這裡的時間段是按照機器時間測量的。如圖1-2 所示,在小灰的例子中,處理時間視窗在他手機離線後會繼續計時,因此不會把她離線那段時間的活動考慮在內。也就是說,因為資料到達視窗的速率不同,所以Flink視窗運算元中使用處理時間會導致不確定的結果。

Flink中有哪些時間型別,請詳細介紹它們的不同點?

圖1-2 事件處理時間

事件接入時間(Ingestion Time)

事件在進入Flink的時間,即將每一個事件在資料來源運算元的處理時間作為事件時間的時間戳,並自動生成水位線(WaterMark會在後面介紹)。

Ingestion Time是 Event Time 和 Processing Time 的混合體,它表示事件進入流處理引擎的時間

。和事件生成時間相比,事件接入時間(Ingestion Time)的價值不大,因為它的效能和事件時間類似,但卻無法提供確定的結果。

18。4 三種時間對比

我們總結一下三種時間的特點,如圖1-3 所示,

Event Time:事件建立的時間

Processing Time:執行操作運算元的本地系統時間,與機器相關

Ingestion Time:資料進入Flink的時間

Flink中有哪些時間型別,請詳細介紹它們的不同點?

圖1-3 三種時間語義的比對

不知道你會不會有這樣一個疑問:既然事件時間已經能夠解決所有的問題了,那為何還要用處理時間呢?其實處理時間有其特定的使用場景,處理時間由於不用考慮事件的延遲與亂序,所以其處理資料的延遲較低。因此如果一些應用比較重視處理速度而非準確性,那麼就可以使用處理時間。