Flink vs Spark Streaming:到底选哪个
架构对比 · 延迟 · 语义 · 生态 · 选型决策
📋 面试题
Flink和Spark Streaming有什么区别?你们为什么选Flink不选Spark?
💡 先想30秒,再往下看答案
核心架构差异
| 对比维度 | Flink | Spark Structured Streaming |
|---|---|---|
| 计算模型 | 真正的流处理(逐条处理) | 微批处理(攒一批再算) |
| 延迟 | 毫秒到秒级 | 秒到分钟级(受微批间隔限制) |
| State管理 | 原生支持(RocksDB) | 依赖外部存储或内置State Store |
| Event Time | 原生Watermark机制 | 支持但灵活性不如Flink |
| Exactly-Once | Checkpoint + 2PC | 微批事务 |
| SQL支持 | Flink SQL(动态表) | Spark SQL(成熟) |
| 窗口类型 | 滚动/滑动/会话/全局 | 滚动/滑动(会话支持弱) |
| 社区趋势 | 实时计算首选,快速增长 | 批处理生态强,实时是补充 |
一句话:Flink是为流而生的,Spark是在批之上做的流。
什么场景选Flink?
✅ 低延迟要求(毫秒-秒级)
广告归因、实时风控、实时大屏
✅ 复杂事件处理
多流JOIN、会话窗口、CEP模式匹配
✅ 大State场景
实时去重、实时画像
✅ Event Time处理
乱序数据、迟到数据处理
✅ CDC实时同步
Flink CDC生态完善
什么场景选Spark?
✅ 批流一体(批为主)
已有Spark批处理,加一点实时需求
✅ 延迟要求不高(分钟级可接受)
每分钟/每5分钟的报表刷新
✅ ML/数据科学场景
Spark MLlib + Streaming组合
✅ 团队已有Spark技术栈
学习成本低,运维经验可复用
我在出海硬件品牌用的Spark(公司已有Databricks平台)。在元宇宙社交公司从0搭建选了Flink(需要毫秒级延迟的实时数仓)。当前短剧出海公司也选Flink(广告归因需要Event Time + Interval Join)。
面试高频追问
"延迟差多少?"
Flink:端到端延迟可以做到 100ms-3s(取决于Sink)
Spark Streaming:最低微批间隔100ms,实际端到端 1s-1min
关键差异:
Flink来一条处理一条
Spark攒一批处理一批,即使trigger设100ms,攒+调度的开销也比Flink大
"Exactly-Once实现有什么不同?"
Flink:Checkpoint + Barrier对齐
- 异步快照,不阻塞数据处理(大部分时候)
- State管理精细
Spark:微批事务
- 每个微批是一个原子操作
- 天然适合批式Exactly-Once
- 但微批间隔限制了延迟
"能不能共存?"
完全可以:
离线链路:Spark(批处理、ML)
实时链路:Flink(低延迟、复杂流处理)
OLAP层:Doris/StarRocks(统一查询)
面试加分提示
💡 不要无脑吹Flink,要讲清楚选型理由:
「两者架构本质不同:Flink是真正的流处理,逐条处理延迟低;Spark是微批处理,延迟受批间隔限制。
我的选型经验:需要毫秒级延迟、Event Time处理、复杂多流JOIN选Flink;已有Spark栈、延迟要求不高、批流一体选Spark。两者可以共存,离线用Spark实时用Flink。
我在不同公司根据场景分别用过两种,不是说哪个绝对好。」
📌 总结
| 记忆点 | 内容 |
|---|---|
| 本质区别 | Flink真流处理 vs Spark微批处理 |
| 延迟 | Flink毫秒级 vs Spark秒-分钟级 |
| Flink优势 | 低延迟、Event Time、大State、CDC |
| Spark优势 | 批流一体、ML生态、成熟稳定 |
| 可以共存 | 离线Spark + 实时Flink + OLAP统一查询 |
▶ 下一篇预告:DAY 20 面试项目表达(实时篇)
Wood聊大数据 | 9年大数据老兵,聊技术、聊职场、聊成长
小红书正文
面试问Flink和Spark Streaming选哪个,千万别无脑说Flink好。
本质区别:Flink是真流处理(逐条),Spark是微批处理(攒一批)。延迟差一个量级。
选Flink:毫秒级延迟、Event Time、多流JOIN、CDC同步、大State。选Spark:已有Spark栈、延迟要求不高、批流一体、ML场景。
我在三家公司根据不同场景用过两种:硬件品牌有Databricks选Spark,社交公司要毫秒延迟选Flink,出海公司做广告归因也选Flink。
关键不是哪个更好,是哪个更适合你的场景。