Flink 窗口(Window)超详细核心知识点总结

一、窗口到底是什么?(最核心概念)

1. 一句话定义

窗口 = 把无限流 → 切割成有限的数据块(桶),方便计算。

2. 正确理解(面试必说)

  • 窗口不是固定的框
  • 窗口是动态创建的桶
  • 数据来了 → 分到对应窗口 → 时间 / 数量到了 → 计算输出
  • 窗口区间:左闭右开 [start, end)

3. 窗口的意义

Flink 是流式计算,数据无限,必须用窗口变成有限数据才能统计。


二、窗口两大分类(必考)

1. 按 驱动类型

(1)时间窗口(TimeWindow)

  • 时间切割
  • 到点就触发计算
  • 最常用

(2)计数窗口(CountWindow)

  • 数据个数切割
  • 凑够数量就触发
  • 底层 = 全局窗口

2. 按 数据分配规则 分(4 种)

  1. **滚动窗口(Tumbling)**不重叠、无间隙
  2. **滑动窗口(Sliding)**可重叠、有步长
  3. **会话窗口(Session)**隔一段时间没数据就断开
  4. **全局窗口(Global)**所有数据进同一个窗口(需自定义触发器)

三、窗口 API 最核心结构

复制代码
流
.keyBy(...)         // 分组(必须,否则并行度=1)
.window(...)        // 窗口分配器(定义窗口类型)
.aggregate(...)     // 窗口函数(计算逻辑)

四、Keyed vs Non-Keyed 窗口(超级重要)

1. Keyed Window(推荐 ✅)

  • .keyBy()
  • 多并行度执行
  • 每个 key 独立窗口、独立状态
  • 支持定时器、状态、窗口

2. Non-Keyed Window(不推荐 ❌)

  • 直接 .windowAll()
  • 并行度永远 = 1
  • 性能极差
  • 生产几乎不用

五、窗口分配器(Window Assigners)

1. 时间窗口(最常用)

滚动窗口

复制代码
.window(TumblingProcessingTimeWindows.of(Time.seconds(5)))

滑动窗口

复制代码
.window(SlidingProcessingTimeWindows.of(大小, 步长))

会话窗口

复制代码
.window(ProcessingTimeSessionWindows.withGap(Time.seconds(10)))

2. 计数窗口

滚动计数

复制代码
.countWindow(10)   // 10条数据触发

滑动计数

复制代码
.countWindow(10, 3)  // 窗口10条,每3条滑动一次

六、窗口函数(Window Functions)(必考)

两大类:

1. 增量聚合函数(性能高 ✅)

来一条算一条,不存全部数据

  • ReduceFunction输入、输出类型必须一样
  • AggregateFunction (最强大)支持:
    • 输入类型
    • 中间累加器类型
    • 输出类型三者可不一样!

AggregateFunction 4 个方法:

  1. createAccumulator() 创建累加器
  2. add() 数据来了就加
  3. getResult() 窗口结束输出结果
  4. merge() 会话窗口合并用

2. 全窗口函数(功能强 ✅)

先缓存所有数据,窗口结束一起算

  • WindowFunction(老版,不推荐)
  • ProcessWindowFunction(新版,最强大)

能拿到:

  • 窗口全部数据
  • 窗口开始 / 结束时间
  • 上下文、状态、时间

七、窗口高级 API(面试高频)

1. 允许延迟(allowedLateness)

复制代码
.allowedLateness(Time.minutes(1))
  • 窗口到时间后不关闭
  • 再等 1 分钟,迟到数据仍可进入计算

2. 迟到数据 → 侧输出流(SideOutput)

复制代码
.sideOutputLateData(lateTag)
  • 彻底迟到的数据 → 打入侧输出流
  • 不影响主流
  • 可单独处理、补算

八、本章 10 个最强结论(背会直接过面试)

  1. 窗口 = 把无限流切成有限块进行计算
  2. 窗口是动态桶,不是固定框
  3. keyBy 之后开窗才支持多并行、状态、定时器
  4. 窗口分:时间窗口、计数窗口
  5. 分配规则:滚动、滑动、会话、全局
  6. 增量聚合性能高,全窗口功能全
  7. AggregateFunction 是最灵活的增量聚合
  8. ProcessWindowFunction 功能最强大
  9. 事件时间必须处理迟到数据
  10. 迟到处理:允许延迟 + 侧输出流

九、面试满分回答(直接背)

Flink 窗口是将无界流切割成有界数据块的核心机制,分为时间窗口和计数窗口,按分配规则可分为滚动、滑动、会话和全局窗口。窗口必须在 keyBy 之后使用才能支持高并行、状态和定时器。窗口计算分为增量聚合(Reduce/Aggregate)和全窗口函数(ProcessWindowFunction),前者性能高,后者功能全。事件时间下需通过 allowedLateness 和侧输出流处理迟到数据,保证计算准确。

相关推荐
Agentic AI人工智能与大数据1 小时前
数据产品运营指南:如何提升用户活跃度?这4个策略让数据产品不再“沉睡”
大数据·ai·产品运营
飞Link2 小时前
开发者必读:2026 欧盟“AI Omnibus”法案达成,技术合规性红线在哪里?
大数据
老纪的技术唠嗑局2 小时前
深度解析 LLM Wiki / Obsidian-Wiki / GBrain:Agent 时代知识的“自组织”与“自进化”
大数据·数据库·人工智能·算法
好赞科技4 小时前
2026年高口碑餐厅预约小程序排行榜:智能就餐新体验一键解锁
大数据·微信小程序
数据智能老司机5 小时前
深入解锁 dbt——Documentation:项目文档与数据文档
大数据
计算机毕业编程指导师5 小时前
【计算机毕设推荐】Python+Hadoop+Spark共享单车数据可视化分析系统 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·数据挖掘·spark·课程设计
计算机毕业编程指导师5 小时前
【计算机毕设】基于Hadoop的共享单车订单数据分析系统+Python+Django全栈开发 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·数据挖掘·spark·django
2601_956139425 小时前
文体娱媒品牌全案公司哪家强
大数据·人工智能·python
塔望品牌咨询6 小时前
组织效率诊断框架:返工、解释、等待、救火,分别说明了什么
大数据·产品运营
塔能物联运维6 小时前
两相液冷:从“散热”到“控温”,重构高密度算力的热管理系统
大数据·人工智能