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)滑动窗口之间有重叠,把相邻窗口的结果直接相加会重复计数:窗口越大、步长越小,重复越严重,资源消耗也成比例增长。需要跨窗口汇总时,改用滚动窗口或按事件去重后再算。
窗口大小要与业务口径对齐:按事件时间切分得到的是对齐到自然界的整点窗口,按处理时间切分的窗口边界取决于数据到达时刻,两者结果通常不同,报表口径要写清用的是哪一种。