首页/数据/数仓建模速查/Flink 窗口:滚动、滑动、会话
湖仓与引擎63 条

Flink 窗口:滚动、滑动、会话

窗口按业务语义选择:滚动窗口不重叠、滑动窗口有步长、会话窗口按活跃间隔切分;窗口聚合必须结合水位线处理乱序。

数仓建模速查数据更新于 2026-10-13

Flink 窗口是什么

窗口把无界的流切成有界的片段再做聚合。Flink 常用的三类时间窗口是:滚动窗口(长度固定、彼此不重叠,例如每分钟点击数)、滑动窗口(长度固定、按步长滑动,窗口之间重叠,例如近 5 分钟指标)、会话窗口(按活跃间隔切分,超过设定间隔没有数据就关窗,适合用户行为会话)。窗口聚合要结合事件时间与水位线,否则乱序数据会让结果反复变化。

基本信息

滚动窗口长度固定、彼此不重叠
滑动窗口长度固定、按步长滑动,窗口重叠
会话窗口按活跃间隔切分,超时关窗
计数窗口按元素条数切分,而非时间
时间语义事件时间加水位线决定何时关窗

窗口对比

窗口特征典型用途
滚动窗口不重叠、等长每分钟点击量、每日订单量
滑动窗口有步长、窗口重叠近 5 分钟平均耗时
会话窗口超时切分,长度不固定用户行为会话、设备在线时段
累计窗口窗口逐步扩大,结果不断更新按天累计的实时看板

窗口聚合

窗口聚合
-- 滚动窗口:每分钟统计各门店订单数
SELECT window_start, window_end, store_id, count(1) AS order_cnt
FROM TABLE(
  TUMBLE(TABLE orders, DESCRIPTOR(event_time), INTERVAL '1' MINUTE)
)
GROUP BY window_start, window_end, store_id;
-- 滑动窗口:窗口 5 分钟、每 1 分钟滑动一次
-- HOP(TABLE orders, DESCRIPTOR(event_time), INTERVAL '1' MINUTE, INTERVAL '5' MINUTE)
滑动窗口之间有重叠,把相邻窗口的结果直接相加会重复计数:窗口越大、步长越小,重复越严重,资源消耗也成比例增长。需要跨窗口汇总时,改用滚动窗口或按事件去重后再算。
窗口大小要与业务口径对齐:按事件时间切分得到的是对齐到自然界的整点窗口,按处理时间切分的窗口边界取决于数据到达时刻,两者结果通常不同,报表口径要写清用的是哪一种。

易错点

  • 把滑动窗口结果直接求和:窗口重叠导致重复计数
  • 窗口聚合不结合事件时间:数据延迟或乱序时,已输出的结果与实际不符
  • 会话窗口的间隔设置过小:活跃会话被切成多段,会话数虚高
  • 滑动窗口设置过密(窗口大、步长小):状态与计算量成倍增长
  • 用处理时间窗口做业务统计:数据积压时结果与业务口径对不上

数据来源与参考

  • Apache Flink 官方文档:Windows
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌