天天看點

揭秘流式計算引擎Flink中的時間視窗機制

作者:大資料與人工智能分享

前言

資料,已經滲透到當今各行各業的價值創造過程中,成為核心生産要素之一。海量資料的挖掘和運用,已經初見成效。各大廠也在不斷嘗試用新的流式計算架構來對資料進行處理。其中Flink就是一個非常耀眼的存在。今天,這篇文章就重點介紹一下Flink作為一個實時流處理引擎,其最核心的時間和視窗機制。

揭秘流式計算引擎Flink中的時間視窗機制

Flink中的時間與視窗

大資料進行中有兩種經典模式:批處理、流處理。Flink以流為核心,建構出了高性能、高可用的批流一體的分布式大資料計算引擎,在資料流上提供資料分發、通信、具備容錯能力的分布式計算功能。

目前,Flink以流式計算引擎為基礎,同樣也支援批處理,并且提供了SQL、複雜事件處理CEP、機器學習、圖計算等更進階的資料處理場景。

流式處理系統長期以來一直應用在提供低延遲、不準确/近似結果的場景裡,通常結合批處理系統來提供最終正确的結果。而流批一體計算的設計核心,就是視窗。

時間類型

在Flink中定義了3種時間類型:

揭秘流式計算引擎Flink中的時間視窗機制

3種時間類型

  • 事件時間(Event Time):事件發生的時間,一旦确定之後再也不會改變。
  • 處理時間(Processing Time):消息被計算引擎處理的時間,以各個計算節點的本地時間為準。
  • 攝取時間(Ingestion Time):時間進入流處理系統的時間,對于一個事件來說,使用其被讀取的那一刻的時間戳作為攝取時間。

在Flink應用中可以使用這3種時間類型,其中最常用的是事件時間和處理時間。

視窗類型

揭秘流式計算引擎Flink中的時間視窗機制

為了對資料進行切分處理,Flink中提供了3類預設視窗:計數視窗、時間視窗和會話視窗。

計數視窗(Count Window):分為滾動計數視窗和滑動計數視窗。

  • 滾動計數視窗:累積固定個數的元素即視為一個視窗,該類型的視窗無法像時間視窗一樣事先切分好。
  • 滑動計數視窗:累積固定個數的元素視為一個視窗,每超過一定個數的原則個數,則産生一個新的視窗。
揭秘流式計算引擎Flink中的時間視窗機制

時間視窗((Time Window):分為滾動時間視窗和滑動時間視窗。

  • 滾動時間視窗:表示在時間上按照事先約定的視窗大小切分的視窗,視窗之間不會互相重疊。
  • 滑動時間視窗:表示在時間上按照事先約定的視窗大小、滑動步長切分的視窗,滑動視窗之間可能會存在互相重疊的情況。
揭秘流式計算引擎Flink中的時間視窗機制

會話視窗((Session Window):是一種特殊的視窗,當超過一段時間,該視窗沒有收到新的資料元素,即視為該視窗結束,是以無法事先确定視窗的長度、元素個數,視窗之間也不會互相重疊。

揭秘流式計算引擎Flink中的時間視窗機制

水印 Wartermark

水印用于處理亂序事件。資料總是可能因為各種原因導緻延遲,比如網絡延遲、資料亂序、背壓、failover等。對于延遲太久的資料,不能無限制的等下去,是以必須有個機制,來保證特定的時間後一定會觸發視窗進行計算,這個觸發機制就是Wartermark。

揭秘流式計算引擎Flink中的時間視窗機制

Wartermark處理邏輯

小結

本文簡要介紹了flink中的時間與視窗相關的内容。更詳細的内容摘自《Deep in Flink:Flink核心原理與實作》。

繼續閱讀