🪟 1. 基于時間驅動的滾動時間窗口(Tumbling Time Window - Time-based)
? 定義:
- 每隔固定的時間周期開啟一個新的窗口。
- 窗口之間不重疊。
🕒 示例:
DataStream<Tuple2<String, Integer>> windowedStream = stream.keyBy(keySelector).window(TumblingEventTimeWindows.of(Time.seconds(5))) .sum(1);
🔍 特點:
屬性 | 描述 |
---|
類型 | Keyed 或 Non-Keyed |
時間戳 | 依賴事件時間或處理時間 |
觸發機制 | 固定時間觸發 |
應用場景 | 統計每 N 秒的數據總量(如每分鐘訂單數) |
🧊 2. 基于事件驅動的滾動時間窗口(Tumbling Count Window - Event-based)
? 定義:
- 每收集固定數量的元素后觸發一次窗口計算。
- 不依賴時間,只依賴元素個數。
📏 示例:
DataStream<Tuple2<String, Integer>> windowedStream = stream.keyBy(keySelector).countWindow(10) .sum(1);
🔍 特點:
屬性 | 描述 |
---|
類型 | Keyed 或 Non-Keyed |
時間戳 | 無時間概念,僅按元素數量劃分 |
觸發機制 | 元素數量達到設定值 |
應用場景 | 當數據量穩定但時間不確定時使用(如每100個傳感器讀數統計一次) |
?? 3. 基于時間驅動的滑動時間窗口(Sliding Time Window - Time-based)
? 定義:
- 窗口每隔一定時間“滑動”一次,窗口長度固定。
- 窗口之間有重疊。
🕒 示例:
DataStream<Tuple2<String, Integer>> windowedStream = stream.keyBy(keySelector).window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5))) .sum(1);
🔍 特點:
屬性 | 描述 |
---|
類型 | Keyed 或 Non-Keyed |
時間戳 | 依賴事件時間或處理時間 |
觸發機制 | 固定時間間隔觸發 |
應用場景 | 需要連續、實時更新統計數據(如每5秒查看過去10秒的平均值) |
📐 4. 基于事件驅動的滑動時間窗口(Sliding Count Window - Event-based)
? 定義:
- 每隔固定數量的元素滑動一次窗口,窗口長度也以元素個數為單位。
- 窗口之間可以部分重疊。
📏 示例:
DataStream<Tuple2<String, Integer>> windowedStream = stream.keyBy(keySelector).countWindow(10, 5) .sum(1);
🔍 特點:
屬性 | 描述 |
---|
類型 | Keyed 或 Non-Keyed |
時間戳 | 無時間概念,僅基于元素數量 |
觸發機制 | 元素數量達到設定滑動步長 |
應用場景 | 數據速率不均,需要定期更新統計(如每100個請求統計前200個的平均響應時間) |
🛎? 5. 會話窗口(Session Window)
? 定義:
- 根據活動間隙(gap) 來劃分窗口。
- 如果兩個元素之間的時間差超過設定的 gap,則屬于不同的窗口。
🕒 示例:
DataStream<Tuple2<String, Integer>> windowedStream = stream.keyBy(keySelector).window(EventTimeSessionWindows.withGap(Time.minutes(1))) .sum(1);
🔍 特點:
屬性 | 描述 |
---|
類型 | Keyed 或 Non-Keyed |
時間戳 | 通常基于事件時間 |
觸發機制 | 檢測到會話間隔(gap) |
應用場景 | 用戶行為分析(如點擊流、登錄日志等),識別用戶活躍時間段 |
📊 總結對比表
窗口類型 | 劃分依據 | 是否重疊 | 觸發條件 | 示例 |
---|
滾動時間窗口 | 時間 | 否 | 時間到達 | TumblingEventTimeWindows.of(Time.seconds(5)) |
滾動計數窗口 | 元素個數 | 否 | 數量達到 | countWindow(10) |
滑動時間窗口 | 時間 | 是 | 時間滑動 | SlidingEventTimeWindows.of(Time.seconds(10), Time.seconds(5)) |
滑動計數窗口 | 元素個數 | 是 | 數量滑動 | countWindow(10, 5) |
會話窗口 | 事件間隔 | 動態 | 間隔超過gap | EventTimeSessionWindows.withGap(Time.minutes(1)) |
? 選擇建議
場景 | 推薦窗口類型 |
---|
實時監控每 N 秒匯總一次 | 滾動時間窗口 |
數據按批次處理(如每100條) | 滾動計數窗口 |
需要平滑的實時指標(如移動平均) | 滑動時間窗口 |
數據頻率不規則但需定期統計 | 滑動計數窗口 |
分析用戶行為(如點擊流、登錄會話) | 會話窗口 |