欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > Flink 的窗口机制

Flink 的窗口机制

2025/5/19 9:57:53 来源:https://blog.csdn.net/MAOZEXIJR/article/details/148045838  浏览:    关键词:Flink 的窗口机制

🪟 1. 基于时间驱动的滚动时间窗口(Tumbling Time Window - Time-based)

✅ 定义:

  • 每隔固定的时间周期开启一个新的窗口。
  • 窗口之间不重叠

🕒 示例:

DataStream<Tuple2<String, Integer>> windowedStream = stream.keyBy(keySelector).window(TumblingEventTimeWindows.of(Time.seconds(5))) // 每5秒一个窗口.sum(1);

🔍 特点:

属性描述
类型Keyed 或 Non-Keyed
时间戳依赖事件时间或处理时间
触发机制固定时间触发
应用场景统计每 N 秒的数据总量(如每分钟订单数)

🧊 2. 基于事件驱动的滚动时间窗口(Tumbling Count Window - Event-based)

✅ 定义:

  • 每收集固定数量的元素后触发一次窗口计算。
  • 不依赖时间,只依赖元素个数。

📏 示例:

DataStream<Tuple2<String, Integer>> windowedStream = stream.keyBy(keySelector).countWindow(10) // 每收到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))) // 窗口长10s,每5s滑动一次.sum(1);

🔍 特点:

属性描述
类型Keyed 或 Non-Keyed
时间戳依赖事件时间或处理时间
触发机制固定时间间隔触发
应用场景需要连续、实时更新统计数据(如每5秒查看过去10秒的平均值)

📐 4. 基于事件驱动的滑动时间窗口(Sliding Count Window - Event-based)

✅ 定义:

  • 每隔固定数量的元素滑动一次窗口,窗口长度也以元素个数为单位。
  • 窗口之间可以部分重叠。

📏 示例:

DataStream<Tuple2<String, Integer>> windowedStream = stream.keyBy(keySelector).countWindow(10, 5) // 窗口包含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))) // 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)
会话窗口事件间隔动态间隔超过gapEventTimeSessionWindows.withGap(Time.minutes(1))

✅ 选择建议

场景推荐窗口类型
实时监控每 N 秒汇总一次滚动时间窗口
数据按批次处理(如每100条)滚动计数窗口
需要平滑的实时指标(如移动平均)滑动时间窗口
数据频率不规则但需定期统计滑动计数窗口
分析用户行为(如点击流、登录会话)会话窗口

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词