实时计算与流处理全景知识图谱

偏工程落地的流计算总装图,回答实时数据如何从"快一点的批处理"进化到真正的流原生架构(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 引擎 + 物化视图查询延迟不达标或数据不一致
三、演进时间线
2010
Storm 开源,开启大规模实时计算时代(At-least-once)
2012
Spark Streaming 发布,Micro-batch 模型简化编程
2014
Flink 进入 Apache,真正的流优先(stream-first)引擎
2016
Kafka Streams 发布,轻量级流处理库(无需集群)
2017
Flink Exactly-once 落地(两阶段提交 + Checkpoint)
2019
Flink SQL 成熟,流处理进入 SQL 化时代
2021
实时数仓概念普及(Flink + StarRocks/Doris)
2023
流批一体落地加速,Flink 统一 API 覆盖两种模式
2024-2025
Flink 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 生态的湖仓一体方案
六、学习路径
1
数据工程师路线
从 SQL 入门到实时数仓建设
Flink SQL 基础 窗口与聚合 CDC 实时同步 实时数仓分层
2
平台工程师路线
从部署运维到平台化建设
集群部署与资源管理 Checkpoint 调优 反压诊断与治理 作业升级与 Savepoint
3
架构师路线
从技术选型到架构决策
流批一体评估 延迟/成本权衡 实时数仓选型 流式湖仓架构
七、高频认知误区
误区:流处理就是更快的批处理
流处理有完全不同的时间模型(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)模糊流计算与数据库边界。

总结

实时计算的本质不是"把延迟降到零",而是在时间、状态和一致性约束下,用可持续的工程代价交付业务需要的实时性。好的流处理架构让数据及时且正确,坏的流处理架构让团队疲于救火。