1、Window Assinger是干啥的
當你決定stream是否keyby之后,window是沒有構建的,你還需要指定一個window Assinger用於定義元素如何分配到窗口中。
2、window Assinger如何指定?
Keyedstream:window(WindowAssigner)
non-keyed streams :windowAll(WindowAssigner)
window Assinger的作用:負責將每個傳入的元素分配給一個或多個窗口
有了window Assinger,才會創建出各種形式的window來覆蓋我們所需的各種場景,所以不用過多關注window本身的分類,關注window Assinger的分類即可。
Count-based window: 根據元素個數對數據流進行分組切片
Tumbling CountWindow(翻滾窗口)
Sliding CountWindow(滑動窗口)
Time-based window: 根據時間對數據流進行分組切片
Tumbling Window
Sliding Window
Session Window
注意:Time-based window [start,end)
3、Tumbling Windows-翻滾窗口
3.1、定義:將數據依據固定的窗口長度對數據進行切片
3.2、特點:
時間對齊
窗口長度固定
event無重疊
3.3、適用場景:
BI統計(計算各個時間段的指標)
3.4、Tumbling Windows的使用
對齊方式:默認是aligned with epoch(整點、整分、整秒等),可以通過offset參數改變對齊方式
4、Sliding Windows-滑動窗口
4.1、定義:是固定窗口的更廣義的一種形式。滑動窗口由固定的窗口長度和滑動間隔組成
4.2、特點:
時間對齊
窗口長度固定
event有重疊
4.3、適用場景:
監控場景,對最近一個時間段內的統計(求某接口最近5min的失敗率來決定是否要報警)
4.4、Sliding Windows的使用
對齊方式:默認是aligned with epoch(整點、整分、整秒等),可以通過offset參數改變對齊方式。
5、Session Windows
5.1、定義:
類似於web應用的session,即一段時間沒有接受到新數據就會生成新的窗口(固定gap/gap fun)
5.2、特點:
時間無對齊
event不重疊
沒有固定開始和結束時間
5.3、適用場景:
線上用戶行為分析
5.4、Session Windows的使用
5.4.1、Gap
固定gap
動態gap(函數):實現SessionWindowTimeGapExtractor
5.4.2、特殊處理方式
session window operator為每個到達的event創建一個新窗口,如果它們之間的距離比定義的間隔更近,則將窗口合並在一起
為了能夠合並, session window operator需要合並觸發器和合並窗口函數,例如ReduceFunction、AggregateFunction或ProcessWindowFunction (FoldFunction不能合並)
6、Global Windows
6.1、定義:有相同key的所有元素分配給相同的單個全局窗口
6.2、必須指定自定義觸發器否則沒有任何意義
6.3、注意:不要跟Non-keyed Window搞混,兩個不同的角度