一、背景
flink在流處理程序中,資料不斷進來,我們需要在一個時間段內進行維度上對資料進行聚合(視窗),Flink提供了Tumbling Windows(無重疊)、Sliding Windows(有重疊)、Session Windows(無重疊) 三種視窗型別,視窗 驅動主要分為(時間、數量)兩種,根據我們實際的業務場景選擇不同的視窗型別,
二、時間
我們基于特定時間段進行聚合時,可以參考不同的時間型別,Flink 最新版本提供了Event Time、Processing Time 兩種時間型別,

來源官方圖片
- Event Time :事件時間是每個事件在其生產設備上發生的時間,這個時間通常是放在記錄.中,并且可以從紀錄中獲取時間時間戳,事件在flink 流轉時,有時因為網路、 資源等,產生一些亂序,獲取到時間亂序,為了資料更準確,Flink 提供了水 位 線WaterMark)來跟蹤Event Time
- Processing Time :處理時間是執行相應操作的機器的系統時間,flink task處理資料的時 間,不會出現時間亂序,有著最好的性能和最低的延遲,資料結果可能 得到不一致的情況
三、滾動視窗(Tumbling Windows)
滾動視窗將每個元素分配給指定視窗大小的視窗,滾動視窗具有固定大小并且不重疊,例如,如果指定一個大小為 5 分鐘的滾動視窗,則將評估當前視窗,并每隔五分鐘啟動一個新視窗,如下圖所示,

來源官方圖片
例如我們經常統計5秒用戶點擊了多少次數等這樣的場景,每個人運用的場景不一樣,事件時間舉例子說明比較清晰:
1、我們采用事件時間,window的觸發機制,是按照時間的劃分,如果window設定5秒,那么20秒會把window劃分為如下的形式:
[00:15:10 00:15:15)
[00:15:15 00:15:20)
2、通程序式驗證,順序發送10條資料
發送資料
視窗統計的執行結果
7> (002,3,1642263310000,1642263315000)
7> (002,5,1642263315000,1642263320000)
說明:002是key,3是資料量,后面兩個1642263310000,1642263315000分別代表視窗的開始時間和結束時間
四、滑動視窗(Sliding Windows)
滑動視窗將元素分配給固定長度的視窗,類似于滾動視窗,視窗的大小由視窗大小引數配置,一個附加的視窗滑動引數控制滑動視窗的啟動頻率,因此,如果window size parameter小于視窗大小,則滑動視窗可能會重疊,在這種情況下,元素被分配給多個視窗,例如,大小為 10 分鐘的視窗滑動 5 分鐘,每 5 分鐘就會獲得一個視窗,其中包含在最后 10 分鐘內到達的事件,如下圖所示,

來源官方圖片
這個我們比較少用,這邊先不做說明,后面需要在補上
五、會話視窗(Session Windows)
會話視窗按活動會話對元素進行分組,與滾動視窗和滑動視窗相比,會話視窗不重疊,也沒有固定的開始和結束時間,相反,當會話視窗在一段時間內沒有接收到元素時,即當出現不活動間隙時,會話視窗將關閉,會話視窗可以配置有會話間隙功能,該功能定義不活動的時間長度,當此期限到期時,當前會話關閉,后續元素被分配到新的會話視窗,

來源官方圖片
例如用戶在5秒內沒在點擊,認為這個用戶不活躍,那么通過會話視窗進行統計,事件時間舉例子說明比較清晰:
1、我們采用事件時間,window的觸發機制,是按照時間的劃分,如果window設定5秒
發送資料:
{"key":"001","time":1642263313000}
{"key":"001","time":1642263316000}
{"key":"001","time":1642263320000}
{"key":"001","time":1642263325000}
{"key":"001","time":1642263331000}
{"key":"001","time":1642263338000}
window劃分為如下的形式:
[1642263313000,1642263330000)
[1642263331000,1642263336000)
結果說明
1> (001,4,1642263313000,1642263330000)
1> (001,1,1642263331000,1642263336000)
結果說明(第一個結果):第一條跟第二條相差3秒,沒有觸發
第二條跟第三條相差4秒,沒有觸發
第三條跟第4條相差5秒,沒有觸發
第四條跟第5條相差6秒>gap(5秒),觸發視窗
統計結果是前面4條資料
六、總結
我們對視窗的簡單介紹(后面也會繼續完善),沒很復雜,比較能快速理解,后面會有實際的例子,對代碼會有更好的理解、還有水位線的介紹
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413309.html
標籤:其他
