在 Apache Flink 中,每种窗口类型都有其更细致的分类,具体取决于它们基于时间特征的不同方式(例如事件时间或处理时间)和触发条件。以下是每种窗口类型的详细分类:
1. 滚动窗口(Tumbling Window)
滚动窗口可以根据事件时间或处理时间来划分。
-
事件时间滚动窗口(Event Time Tumbling Window) :
java 复制代码 dataStream .keyBy(value -> value.f0) .window(TumblingEventTimeWindows.of(Time.seconds(10))) .sum(1);- 基于事件时间,如果是刚启动,第一条数据不会触发窗口,第二条才会触发,然后每次最新数据不会触发,会保留在窗口。
-
处理时间滚动窗口(Processing Time Tumbling Window) :
java 复制代码 dataStream .keyBy(value -> value.f0) .window(TumblingProcessingTimeWindows.of(Time.seconds(10))) .sum(1);
2. 滑动窗口(Sliding Window)
滑动窗口也可以根据事件时间或处理时间来划分。
-
事件时间滑动窗口(Event Time Sliding Window) :
java 复制代码 dataStream .keyBy(value -> value.f0) .window(SlidingEventTimeWindows.of(Time.seconds(10), Time.seconds(5))) .sum(1); -
处理时间滑动窗口(Processing Time Sliding Window) :
java 复制代码 dataStream .keyBy(value -> value.f0) .window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5))) .sum(1);
3. 会话窗口(Session Window)
会话窗口可以根据事件时间或处理时间来划分。
-
事件时间会话窗口(Event Time Session Window) :
java 复制代码 dataStream .keyBy(value -> value.f0) .window(EventTimeSessionWindows.withGap(Time.minutes(5))) .sum(1); -
处理时间会话窗口(Processing Time Session Window) :
java 复制代码 dataStream .keyBy(value -> value.f0) .window(ProcessingTimeSessionWindows.withGap(Time.minutes(5))) .sum(1);
4. 全局窗口(Global Window)
全局窗口不区分事件时间和处理时间,必须配合触发器使用。
-
全局窗口(Global Window) :
java 复制代码 dataStream .keyBy(value -> value.f0) .window(GlobalWindows.create()) .trigger(CountTrigger.of(100)) .sum(1);
5. 计数窗口(Count Window)
计数窗口根据元素数量而不是时间来划分。
-
滚动计数窗口(Tumbling Count Window) :
java 复制代码 dataStream .keyBy(value -> value.f0) .countWindow(100) .sum(1); -
滑动计数窗口(Sliding Count Window) :
java 复制代码 dataStream .keyBy(value -> value.f0) .countWindow(100, 10) .sum(1);
总结
每种窗口类型都有细分的分类,主要根据时间特征(事件时间或处理时间)和触发条件(计数窗口或时间窗口)来区分。选择合适的窗口类型和分类,可以更有效地处理和聚合数据流中的信息。
详细分类整理
滚动窗口(Tumbling Window)
- 事件时间滚动窗口(Event Time Tumbling Window)
- 处理时间滚动窗口(Processing Time Tumbling Window)
滑动窗口(Sliding Window)
- 事件时间滑动窗口(Event Time Sliding Window)
- 处理时间滑动窗口(Processing Time Sliding Window)
会话窗口(Session Window)
- 事件时间会话窗口(Event Time Session Window)
- 处理时间会话窗口(Processing Time Session Window)
全局窗口(Global Window)
- 全局窗口(Global Window)
计数窗口(Count Window)
- 滚动计数窗口(Tumbling Count Window)
- 滑动计数窗口(Sliding Count Window)