窗口的划分:
- 翻滾窗口(Tumbling Window,無重疊)
- 滾動窗口(Sliding Window,有重疊)
- 會話窗口(Session Window,活動間隙)
窗口的類型:
窗口在處理數據前,會對數據做分流,有兩種控制流的方式,按照數據流划分:Keyed和Non-Keyed Windows。
Keyed Windows:就是有按照某個字段分組的數據流使用的窗口,可以理解為按照原始數據流中的某個key進行分類,擁有同一個key值的數據流將為進入同一個window,多個窗口並行的邏輯流。
Non-Keyed Windows:沒有進行按照某個字段分組的數據使用的窗口
窗口算子:
基於窗口內數據的計算,叫做窗口函數。
Keyed Windows 常用的有以下四個:
1. ProcessWindowFunction 效率低,整個窗口的數據都會被傳遞給算子,詳見代碼:Flink window Function - ProcessWindowFunction
2. ReduceFunction 簡單易用,推薦使用,詳見代碼:Flink window Function - ReduceWordCount
3. AggregateFunction 復雜邏輯,詳見代碼:Flink window Function - AggregateFunction
4. FoldFunction 過時API,不夠友好,詳見代碼:Flink window Function – FoldFunction
Non-Keyed Windows
1. ProcessAllWindowFunction 將所有的數據放到一個窗口,性能低下,不常用。詳見代碼:Flink window Function - ProcessAllWindowFunction