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

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

相关文章:

  • 【ant design】ant-design-vue 4.0实现主题色切换
  • 【软考 McCabe度量法】
  • 深入理解指针(6)
  • 基因编辑根治胰腺癌-陈墨仙
  • Raft 协议:分布式一致性算法的核心思想
  • 欢乐熊大话蓝牙知识4:GATT 协议全解:蓝牙传数据到底怎么传?
  • 费马小定理
  • 数学复习笔记 16
  • 【Linux网络编程】Socket编程:协议理论入门
  • 数据库的规范化设计方法---3种范式
  • AIStarter Windows 版本迎来重磅更新!模型插件工作流上线,支持 Ollama / ComfyUI 等多平台本地部署模型统一管理
  • FPC连接器的未来趋势:柔性时代的核心桥梁
  • 【Redis】Hash 哈希
  • opencv4.11生成ArUco标记 ArUco Marker
  • IP68防水Type-C连接器实测:水下1米浸泡72小时的生存挑战
  • CodeBuddy 开发 JSON 可视化工具实录:JsonVision 的诞生之旅
  • 广东省省考备考(第十三天5.17)——言语:接语选择题(听课后强化练习)
  • 永磁同步电机公式总结——反电动势、磁链、转矩公式;三项、两项电压方程;坐标表换方程
  • 通过多线程获取VENC的H264码流数据
  • 11.1 LangGraph生产级AI Agent开发:状态管理与多智能体系统构建全解析
  • RAID学习笔记
  • USB和串口软件编程控制继电器通断
  • windows系统各版本下载
  • 查看电脑信息的方法-CPU核心数量、线程数量等
  • TXT记录解析技术深度解析与应用实践
  • 医疗大模型技术演进与行业应用全景
  • 在Java中调用Ant命令
  • 动态规划(3)学习方法论:构建思维模型
  • CSP 2024 提高级第一轮(CSP-S 2024)单选题解析
  • 利用SenseGlove触觉手套开发XR手术训练体验