订阅更新

Flink vs Spark Streaming:到底选哪个

Flink 实时计算 20 天 · 第 19 讲 高阶 约 4 分钟读完

架构对比 · 延迟 · 语义 · 生态 · 选型决策

本文目录
  1. 📋 面试题
  2. 核心架构差异
  3. 什么场景选Flink?
  4. 什么场景选Spark?
  5. 面试高频追问
  6. 面试加分提示
  7. 📌 总结

📋 面试题

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。

关键不是哪个更好,是哪个更适合你的场景。

刷题进度保存在当前浏览器