实时计算与流处理全景知识图谱
偏工程落地的流计算总装图,回答实时数据如何从"快一点的批处理"进化到真正的流原生架构(2025-2026 观察窗口)
阅读边界:本页聚焦流计算引擎、时间语义、状态管理、一致性保障和实时数仓。不替代消息队列(见
消息队列图谱,侧重传输层)或离线数仓/批处理专题。
数据源与接入
Kafka / Pulsar / CDC / IoT
→
流计算引擎
Flink / Spark / Kafka Streams
→
时间与状态
Watermark / 窗口 / Checkpoint
→
输出与服务
实时数仓 / OLAP / 特征 / 告警
→
治理与运维
延迟 / 反压 / 资源 / Schema
| 层级 | 核心依赖 | 失败后果 |
| 流计算引擎 | 消息系统的分区、偏移量和回放能力 | 数据源不可回放则无法恢复 |
| 时间语义 | 事件时间戳质量、乱序程度 | Watermark 不准导致数据丢失或延迟过大 |
| 状态管理 | State Backend(RocksDB)、Checkpoint 频率 | 状态丢失导致计算结果错误 |
| Exactly-once | 端到端事务(Source + Engine + Sink) | 任一环节断裂则语义降级 |
| 实时数仓 | 流计算 + OLAP 引擎 + 物化视图 | 查询延迟不达标或数据不一致 |
2010Storm 开源,开启大规模实时计算时代(At-least-once)
2012Spark Streaming 发布,Micro-batch 模型简化编程
2014Flink 进入 Apache,真正的流优先(stream-first)引擎
2016Kafka Streams 发布,轻量级流处理库(无需集群)
2017Flink Exactly-once 落地(两阶段提交 + Checkpoint)
2019Flink SQL 成熟,流处理进入 SQL 化时代
2021实时数仓概念普及(Flink + StarRocks/Doris)
2023流批一体落地加速,Flink 统一 API 覆盖两种模式
2024-2025Flink CDC / Paimon 成熟,流式湖仓一体架构落地
4.1 延迟 / 吞吐 / 一致性三角
流计算的三个核心指标不可兼得:降低延迟需要更频繁的处理(牺牲吞吐);保证一致性需要 Checkpoint 和事务(增加延迟);提高吞吐需要批量处理(增加延迟)。
工程判断:先明确业务对延迟的真实需求。大量场景"秒级"就够,不需要"毫秒级"。过度追求低延迟会让系统复杂度和成本指数上升。
4.2 时间语义与 Watermark
Event Time vs Processing Time:Event Time 是事件实际发生时间,Processing Time 是引擎处理时间。生产环境几乎都应该用 Event Time,否则乱序和延迟会导致结果不确定。
Watermark:引擎对"数据完整性"的估计——"我认为时间 T 之前的数据都已到达"。Watermark 太激进会丢迟到数据,太保守会增加延迟。
迟到数据处理:Allowed Lateness(允许窗口延迟关闭)+ Side Output(迟到数据旁路输出)。没有完美方案,只有业务可接受的权衡。
4.3 窗口策略
Tumbling Window(滚动窗口):固定大小、不重叠。适合周期性聚合(每分钟 PV、每小时 GMV)。
Sliding Window(滑动窗口):固定大小、可重叠。适合移动平均、趋势检测。窗口越密集计算开销越大。
Session Window(会话窗口):按活动间隔动态划分。适合用户行为分析、会话聚合。实现复杂度高于固定窗口。
Global Window + Trigger:自定义触发条件,最灵活但最难调试。适合不规则聚合场景。
4.4 状态管理与 Checkpoint
State Backend:HashMapStateBackend(内存,快但容量有限)vs RocksDBStateBackend(磁盘,容量大但有序列化开销)。生产环境大状态场景几乎都用 RocksDB。
Checkpoint:定期将算子状态快照到持久化存储(HDFS/S3)。增量 Checkpoint 只保存变化部分,大幅降低 IO。Checkpoint 间隔是恢复时间和性能开销的权衡。
Savepoint:手动触发的全量快照,用于版本升级、拓扑变更、A/B 测试。Savepoint 兼容性是 Flink 作业长期运维的关键挑战。
4.5 Exactly-once 端到端
引擎内部:Flink 通过 Checkpoint Barrier 对齐实现算子间 Exactly-once。Barrier 对齐会引入背压,Unaligned Checkpoint 缓解但增加恢复时间。
Source 端:需要可回放(Kafka offset 回退)。不可回放的 Source(如 Socket)无法保证 Exactly-once。
Sink 端:两阶段提交(Kafka/JDBC)或幂等写入(Upsert 语义)。两阶段提交延迟高但语义强,幂等写入延迟低但需要业务配合。
工程判断:端到端 Exactly-once 的代价是吞吐下降 10-30% 和延迟增加。大多数场景用 At-least-once + 幂等 Sink 更务实。
流计算引擎
- Flink:流优先、状态管理最强、Exactly-once 成熟。生产环境主流选择,生态最完善(SQL/CDC/Connector)
- Spark Structured Streaming:Micro-batch 模型,与 Spark 批处理统一 API。适合已有 Spark 生态、对延迟要求不高(秒级)的场景
- Kafka Streams:轻量级库(非集群),嵌入应用进程。适合简单流处理、不想引入额外基础设施的场景
- Pulsar Functions:Pulsar 原生轻量计算,适合简单 ETL。复杂场景仍需 Flink
- RisingWave:流式数据库,用 SQL 定义流计算 + 物化视图。新兴方案,适合流式 OLAP 场景
实时 OLAP 引擎
- StarRocks:MPP 架构,实时导入 + 高并发查询。适合实时报表、用户画像
- Apache Doris:与 StarRocks 同源,社区活跃。适合中小规模实时分析
- ClickHouse:列存极致压缩,单表查询性能最强。适合日志分析、时序数据
- Apache Pinot:LinkedIn 开源,面向用户侧实时分析。适合高并发低延迟 OLAP
- Apache Paimon:流式数据湖表格式,支持流读流写。Flink 生态的湖仓一体方案
Flink SQL 基础→
窗口与聚合→
CDC 实时同步→
实时数仓分层
集群部署与资源管理→
Checkpoint 调优→
反压诊断与治理→
作业升级与 Savepoint
流批一体评估→
延迟/成本权衡→
实时数仓选型→
流式湖仓架构
误区:流处理就是更快的批处理
流处理有完全不同的时间模型(Event Time)、状态模型(增量计算)和容错模型(Checkpoint)。把流当快批用,会在乱序、状态和恢复上踩坑。
误区:Exactly-once 没有代价
Checkpoint Barrier 对齐增加延迟,两阶段提交降低吞吐,事务 Sink 限制并发。Exactly-once 是用性能换正确性,不是免费午餐。
误区:所有指标都应该实时化
实时计算的运维成本远高于批处理。大量报表场景分钟级甚至小时级延迟完全够用。先问业务"多快才够",而不是默认"越快越好"。
误区:Flink 能替代所有批处理
Flink 的流批一体在 API 层统一了,但超大规模历史数据回算(PB 级全量扫描)、复杂 Shuffle、资源调度上,Spark 仍有优势。选型看场景,不看口号。
确定趋势:Flink 继续主导流计算市场、流式湖仓(Paimon/Iceberg)成为数据湖实时化的标准路径、Flink CDC 替代传统 ETL 工具。
演进中:流批一体真正统一开发体验(一套代码两种模式)、Serverless Flink 降低运维门槛、流式物化视图替代部分实时作业。
值得关注:AI 特征实时化(流上特征计算 + 在线推理)、流上 ML 推理(Flink ML)、流式数据库(RisingWave)模糊流计算与数据库边界。
总结
实时计算的本质不是"把延迟降到零",而是在时间、状态和一致性约束下,用可持续的工程代价交付业务需要的实时性。好的流处理架构让数据及时且正确,坏的流处理架构让团队疲于救火。