流式数据处理:Kafka · Flink · 状态 · Exactly-Once
读者读完 数据湖与开放表格式 第 19 章(流式 CDC 入湖)之后,仍会面对另一组问题:乱序事件怎么算对窗口、状态存在哪、checkpoint 怎么把 offset 和算子状态绑在同一一致性点、背压为什么让整个管道停下来。lakehouse 系列讲的是「数据怎么落进表」;本系列讲的是「实时管道怎么算、怎么容错、怎么保证语义」。
本系列不写 Flink SQL 语法大全,也不写云托管 Kafka/Flink 定价,写:
- 事件时间、watermark、窗口如何在乱序到达时仍输出正确结果。
- Kafka 分区有序、ISR 副本、consumer group 与事务 producer 各自保证什么。
- Flink checkpoint 如何在算子间注入 barrier,把 Kafka offset 与 RocksDB 状态快照在同一时间点对齐。
- 端到端 exactly-once 如何把 Flink 两阶段提交与 Iceberg 表提交对接(深化 lakehouse 第 19 章)。
- 背压、数据倾斜、状态膨胀、checkpoint 超时等生产故障怎么诊断。
系列状态:已完成(2026-07-01)。全 18 篇正文均已发布,可点进阅读。
版本锚定:Kafka 3.x(KRaft);Flink 1.20+ / 2.x 主线,API 差异处标注版本边界;Debezium 以官方 connector 文档为准。
适合谁看
- 数据平台 / 实时工程师:维护 Kafka + Flink 管道,或从 batch ETL 转 stream。
- 读过 lakehouse/19 的开发者:想从引擎侧理解 checkpoint 间隔、小文件与 exactly-once。
- 后端工程师:要把 CDC、实时聚合、实时特征接到业务或湖仓。
- SRE:排查 lag、背压、checkpoint 失败、状态 OOM。
推荐阅读路径
| 路径 | 篇目 | 适合 |
|---|---|---|
| 数据平台端到端 | 1 → 4 → 7 → 10 → 15 → 17 → 18 | Kafka + Flink + 入湖 |
| 从 lakehouse/19 来 | 2 → 3 → 10 → 15 → 17 | 水位、窗口、checkpoint |
| Kafka 运维转流计算 | 4 → 5 → 6 → 7 → 10 → 14 | 传输层到交付语义 |
| 状态与性能调优 | 9 → 12 → 13 → 18 | RocksDB state 与背压 |
| CDC 实时同步 | 5 → 16 → 15 → 17 | Debezium 到湖 |
| 引擎选型 | 1 → 6 → 14 → 18 | 对照与决策树 |
| 完整通读 | 1 → … → 18 | 系统掌握 |
一、六个关键问题
- 流处理与批处理/微批的本质差异是什么? → 第 1 篇(日志模型、状态、延迟语义)
- 事件时间、watermark、窗口如何在乱序下仍算对? → 第 2、3 篇
- Kafka 的分区、副本、consumer group 各自保证什么? → 第 4、5、6 篇
- Flink 的状态存在哪,checkpoint 怎么工作? → 第 9、10、11、12、13 篇
- at-least-once 与 exactly-once 的边界,端到端怎么做到? → 第 14、15 篇
- CDC、入湖与生产运维怎么衔接? → 第 16、17、18 篇
二、篇目依赖
flowchart TD
A["01 流处理全景"] --> B["02 事件时间与 Watermark"]
B --> C["03 窗口"]
A --> D["04 Kafka 日志与分区"]
D --> E["05 副本与 Consumer Group"]
E --> F["06 Kafka 事务"]
A --> G["07 Flink 运行时"]
G --> H["08 DataStream 与算子"]
H --> I["09 键控状态与 TTL"]
I --> J["10 Checkpoint"]
J --> K["11 Savepoint"]
I --> L["12 RocksDB State Backend"]
L --> M["13 状态放大与调优"]
F --> N["14 交付语义"]
J --> N
N --> O["15 两阶段提交与 EOS"]
E --> P["16 Debezium CDC"]
O --> P
P --> Q["17 流式入湖深化"]
C --> R["18 背压、故障与引擎对照"]
M --> R
Q --> R
跨系列: lakehouse/19 → 15、17; lsm-tree → 12、13。
三、目录与每篇价值点
第一部分:流处理基础
- 流处理全景:从日志到有状态计算
- 批 vs 流 vs 微批四维度对比;Lambda/Kappa 边界;与 lakehouse 的分层对称;全系列地图。
- 事件时间、处理时间与
Watermark
- 三种时间语义;watermark 生成与迟到数据;侧输出与 allowed lateness;乱序实验对比。
- 窗口:滚动、滑动与会话
- Tumbling / Sliding / Session;Trigger 与 Evictor;窗口 state 与批式 GROUP BY 的对照。
第二部分:Kafka 内核
- Kafka
日志模型与分区
- Log Segment 文件布局;offset 与分区内有序;KRaft
边界;
kafka-dump-log实验。
- Log Segment 文件布局;offset 与分区内有序;KRaft
边界;
- 副本、ISR
与 Consumer Group
- HW/LEO/ISR;acks 语义;rebalance 代价;offset 提交与 Flink checkpoint 分工。
- Kafka
事务与幂等 Producer
- 幂等 sequence;事务生命周期;read_committed;与 Flink EOS 的衔接。
第三部分:Flink 运行时与状态
- Flink
运行时模型
- JM/TM/Slot;ExecutionGraph;operator chain;并行度与资源隔离。
- DataStream
与算子语义
- Shuffle 策略;keyBy 与 KeyGroup;ProcessFunction 与 TimerService。
- 键控状态与
State TTL
- 五类 KeyedState;HashMap vs RocksDB backend 选型;TTL 与 checkpoint 交互。
- Checkpoint
机制
- Aligned/unaligned barrier;CheckpointCoordinator;Kafka offset 写入 checkpoint。
- Savepoint
与升级恢复
- Savepoint vs Checkpoint;改并行度与 rescale;跨版本状态兼容规则。
第四部分:RocksDB 状态后端
- RocksDB
State Backend 内核路径
- ColumnFamily 映射;读写路径与 LSM 对照;增量 checkpoint 的 IO 差异。
- 状态放大、Compaction
与调优
- 窗口 state 膨胀;RocksDB 写放大;hot key 倾斜;设计 vs 调参取舍。
第五部分:交付语义与 CDC
- 交付语义:从
at-most-once 到 exactly-once
- Source/引擎/Sink 三层组合;重复消费与幂等 sink 修复手段。
- 两阶段提交与端到端
Exactly-Once
- GenericTwoPhaseCommitSink;Kafka/Iceberg sink 的 2PC;与 lakehouse 提交协议对齐。
- Debezium 与
Change Data Capture
- CDC 事件结构;snapshot vs streaming;Connect offset topic;与入湖 upsert 衔接。
第六部分:入湖与运维收束
- 流式入湖深化(与
Lakehouse 第 19 章对读)
- 引擎侧 checkpoint 间隔 ↔︎ 小文件;并行 writer 与 commit 冲突;与表治理的配合。
- 背压、故障模式与引擎对照
- Credit-based 背压;倾斜/rebalance 风暴/checkpoint 连锁;Flink/KStreams/Spark SS/RisingWave 对照。
四、先修与延伸阅读
| 先修 | 说明 |
|---|---|
| lakehouse 第 19 章 | 入湖侧 sink 与表提交(本系列深化引擎侧) |
| lsm-tree 系列 | LSM 读写路径(RocksDB state 对照) |
| distributed 日志复制 | ISR 与一致性直觉 |
| 延伸 | 说明 |
|---|---|
| lakehouse 系列 | 表格式、compaction、查询引擎 |
| observability 系列 | lag、SLO、告警与排障 |
| columnar-engine 系列 | 批式 OLAP 与流式预聚合对照 |
系列 index v1,2026-07-01 — 全 18 篇已完成
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【流式数据处理】背压、故障模式与引擎对照
收束流式数据处理系列:Flink credit-based 背压如何沿算子链传播、Web UI 指标怎么读;数据倾斜、checkpoint 超时连锁、Kafka rebalance 风暴、RocksDB OOM、savepoint 不兼容五类生产故障的诊断与止血;Flink / Kafka Streams / Spark Structured Streaming / RisingWave 在状态模型、交付语义、运维与入湖成熟度上的对照表与选型决策树,不做排名。
【流式数据处理】Checkpoint 机制:Barrier 对齐与一致性快照
从 Chandy-Lamport 分布式快照到 Flink aligned/unaligned checkpoint:CheckpointCoordinator 触发—ack—完成生命周期,Kafka source 如何把 partition offset 写入 checkpoint,以及 interval、timeout、min-pause、concurrent checkpoints 的调优边界。
【流式数据处理】交付语义:从 at-most-once 到 exactly-once
用 Source、引擎、Sink 三层模型拆解 at-most-once、at-least-once、exactly-once 的组合规则与最弱环决定律;对照 Flink checkpoint 模式、Kafka 事务与幂等 producer、重复消费/重复写入的三类修复手段,为两阶段提交 sink 铺垫。
【流式数据处理】流处理全景:从日志到有状态计算
从批、流、微批四维度对比出发,建立「可重放日志 + 有状态计算」心智模型,厘清 Lambda/Kappa 边界与流表对偶,并给出与 lakehouse 入湖侧对称的全系列地图。