从谁的角度看
| 对比维度 | Spark 批处理为主,生态最全 | Flink 原生流处理,状态能力强 |
|---|---|---|
| 定位与模型 | ||
| 核心抽象 | RDD / DataFrame,先描述 DAG 再执行 | DataStream,数据一条条流过算子 |
| 流处理方式 | 微批(Structured Streaming),把流切成小批跑 | 原生流,逐条处理 |
| 流批一体 | 批为主,流是特例 | 流为主,批是有界的流 |
| 性能与延迟 | ||
| 处理延迟 | 微批延迟 100ms~秒级 | 毫秒级,端到端亚秒 |
| 吞吐 | 大批量吞吐极高,离线跑批首选 | 吞吐也高,但更偏重低延迟与状态 |
| 功能特性 | ||
| 状态管理 | 需自己接外部存储(Redis/HBase)或 mapWithState | 内建 Keyed State,支持大状态与 TTL |
| 事件时间 | 支持 Watermark,但受微批粒度限制 | Watermark + 迟到数据 + 会话窗口,最完整 |
| Exactly-Once | 幂等写 + checkpoint,端到端需业务配合 | Checkpoint + 两阶段提交,链路级保证 |
| SQL 与 ML | Spark SQL 成熟,MLlib / GraphX 生态最全 | Flink SQL 够用,ML 生态较弱 |
| 运维与生态 | ||
| 部署依赖 | YARN / K8s / Standalone,依赖较轻 | YARN / K8s,状态大时依赖 HDFS + RocksDB |
| 上手难度 | 中,SQL 就能跑起来 | 较难,时间语义和状态需要理解 |
| 一句话选型 | ||
| 什么时候选它 | 离线 ETL、机器学习、已有 Hive 体系、准实时(秒级)报表 | 实时风控、实时大屏、CEP、需要大状态和毫秒延迟 |
点某一行可以高亮该维度,方便逐条横向读;移动端左右滑动查看全部列。
选型建议
Spark
团队已有数仓、主要跑 T+1 和小时级任务、想一套代码兼顾批和准实时,选 Spark 最省事。
Flink
业务对延迟敏感(风控、告警、实时推荐)、需要复杂状态和事件时间语义,直接上 Flink。
一句话结论
一句话:离线与准实时选 Spark,真实时选 Flink。两者不是替代关系,很多公司是 Spark 跑批、Flink 跑流,共用一套 Kafka 和数仓。