当前位置: 首页 > news >正文

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条)滚动计数窗口
需要平滑的实时指标(如移动平均)滑动时间窗口
数据频率不规则但需定期统计滑动计数窗口
分析用户行为(如点击流、登录会话)会话窗口

相关文章:

  • 数据结构 -- 树形查找(三)红黑树
  • 【数据结构】2-3-1单链表的定义
  • 索引与数据结构、并行算法
  • 【Linux】进程的基本概念
  • 云原生安全:IaaS安全全解析(从基础到实践)
  • C++ 之 继承
  • 批量处理 Office 文档 高画质提取图片、视频、音频素材助手
  • 鸿蒙系统电脑:开启智能办公新时代
  • 【HarmonyOS 5开发入门】DevEco Studio安装配置完全指南
  • 中科院自动化研究所通用空中任务无人机!基于大模型的通用任务执行与自主飞行
  • AIDA64 extreme7.5 版本注册激活方法
  • uniapp的适配方式
  • APP手机端测试覆盖点
  • AI助力,短剧发展引来新的创新热潮
  • C++中的四种强制转换
  • 掌握版本控制从本地到分布式
  • 动态内存管理2+柔性数组
  • docker-compose部署项目(springboot服务)以及基础环境(mysql、redis等)ruoyi-ry
  • Leetcode134加油站
  • GO语言语法---For循环、break、continue
  • 俄需要达成怎样的特别军事行动结果?普京:包含四个方面
  • 信俗与共:清代新疆回疆儒释道庙宇的中华政教
  • 俄乌官员即将在土耳其会谈,外交部:支持俄乌开启直接对话
  • 农行回应“病重老人被要求亲自取钱在银行去世”:全力配合公安机关调查
  • 齐白石精品在波士顿展出,“白石画屋”呈现水墨挥洒
  • 中国巴西民间推动建立经第三方验证的“森林友好型”牛肉供应链