土法炼钢兴趣小组的算法知识备份

流式数据处理 — 系列规划

目录

流式数据处理 — 系列规划

本文是写作规划,不是可发布正文。拆解对象分两层:消息日志与流式传输(Kafka 主线)与流计算引擎(Flink 主线,Kafka Streams / Spark Structured Streaming / RisingWave 对照)。不写 SQL 语法教程,不写云托管 Flink/Kafka 定价与内部实现。

关联文档:index.md(读者入口)。本文件聚焦逐章大纲、来源台账、实验台账与写作顺序。

续作关系:承接 lakehouse 第 19 章——该章只讲入湖侧(sink、CDC upsert、小文件);本系列讲引擎侧(事件时间、watermark、窗口、状态、checkpoint、背压、端到端语义)。


一、为什么写这个系列

1.1 数据平台栈的缺口

已有内容 视角 落点
db/postgresql-kernel/ (26) 行存 OLTP 进程内事务
db/columnar-engine/ (16) 列存 OLAP 批式扫描
db/lakehouse/ (21) 湖仓表格式 对象存储 ACID;第 19 章仅入湖侧
db/lsm-tree/ (5) LSM DIY MemTable/SSTable 原理,未落到 RocksDB state
distributed/ (69) 分布式理论 一致性、日志复制,未落到 Kafka/Flink 工程
quant/11-event-driven 事件驱动应用 偏业务架构,非引擎内核

结论:lakehouse 闭合了「批式数据在对象存储上怎么当表用」;但实时链路里 Kafka 怎么保证顺序与持久、Flink 怎么在有乱序的情况下算对窗口、状态存在哪、checkpoint 怎么对齐 exactly-once——全站没有系统拆解。读者把 CDC 写进 Iceberg 之后,仍会卡在「作业为什么背压、状态为什么膨胀、重启为什么重复消费」。

1.2 为什么选 Kafka(主)+ Flink(主)

维度 Kafka Flink 对照
角色 持久化日志 + 解耦传输 有状态流计算 + 精确一次 KStreams / Spark SS / RisingWave
规范/源码 协议公开、apache/kafka 文档完整、apache/flink 各项目官方文档
与 lakehouse Connect sink、offset 协调 Iceberg/Hudi/Delta sink、2PC 提交 Hudi Streamer 已在 lakehouse/13
与 LSM RocksDB state backend 本系列第 13 章衔接 db/lsm-tree

选 Kafka + Flink 作主线:2024–2026 数据平台实时链路的事实默认组合;对照章各用一章讲清边界,不做排名。

1.3 系列定位

流式数据平台 = 持久日志(Kafka)+ 有状态计算(Flink)+ 交付语义(EOS)+ 下游衔接(湖 / OLTP / 服务)

不写:

写:


二、核心问题与目标读者

2.1 六个关键问题

  1. 流处理与批处理/微批的本质差异是什么?延迟、语义、状态各差在哪? → 第 1 章:全景、Lambda/Kappa 边界、流表对偶。

  2. 事件时间、watermark、窗口如何在乱序到达时仍算对? → 第 2、3 章:三种时间语义、watermark 生成与迟到数据处理、滚动/滑动/会话窗口。

  3. Kafka 的分区、副本、consumer group 各自保证什么,不保证什么? → 第 4、5、6 章:日志结构、ISR、rebalance、事务 producer。

  4. Flink 的状态存在哪,checkpoint 如何把状态与 offset 绑在一起? → 第 9、10、11、13 章:KeyedState、CheckpointCoordinator、RocksDB state backend、savepoint。

  5. at-least-once 与 exactly-once 的边界在哪,端到端怎么做到? → 第 12、14 章:语义层级、两阶段提交 sink、与 lakehouse 提交协议的对齐。

  6. 流作业怎么运维——背压、倾斜、状态膨胀、入湖小文件? → 第 15、16、17 章:背压传播、Debezium CDC 管道、入湖深化、故障模式清单。

2.2 目标读者


三、篇目结构(全 18 篇)

第一部分:流处理基础(第 1–3 篇)

第 1 篇:流处理全景:从日志到有状态计算

第 2 篇:事件时间、处理时间与 Watermark

第 3 篇:窗口:滚动、滑动与会话

第二部分:Kafka 内核(第 4–6 篇)

第 4 篇:Kafka 日志模型与分区

第 5 篇:副本、ISR 与 Consumer Group

第 6 篇:Kafka 事务与幂等 Producer

第 8 篇:DataStream 与算子语义

第 9 篇:键控状态与状态 TTL

第 10 篇:Checkpoint 机制

第 11 篇:Savepoint 与升级恢复

第四部分:RocksDB 状态后端(第 12–13 篇)

第 12 篇:RocksDB State Backend 内核路径

第 13 篇:状态放大、Compaction 与调优

第五部分:交付语义与 CDC(第 14–15 篇)

第 14 篇:交付语义:从 at-most-once 到 exactly-once

第 15 篇:两阶段提交与端到端 Exactly-Once

第六部分:CDC、入湖与运维(第 16–17 篇)

第 16 篇:Debezium 与 Change Data Capture

第 17 篇:流式入湖深化(与 Lakehouse 第 19 章对读)

第 18 篇:背压、故障模式与引擎对照


四、依赖关系

1 → 2 → 3
1 → 4 → 5 → 6
1 → 7 → 8 → 9 → 10 → 11
9 → 12 → 13
6,10 → 14 → 15
5,15 → 16 → 17
3,13,17 → 18

跨系列:

db/lakehouse/19 ──→ 15, 17(入湖语义深化)
db/lsm-tree/    ──→ 12, 13(RocksDB 对照)
distributed/    ──→ 5, 14(复制与一致性直觉)

五、阅读路径

路径 篇目 适合
数据平台工程师 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 系统掌握

六、来源台账

A 级

B 级

禁止


七、实验台账

环境 | Docker Compose:Kafka(KRaft)+ Flink(1.x/2.x 标注)+ MinIO(入湖实验复用 lakehouse);MySQL(Debezium);逐篇交代 CPU、内存、OS、组件版本 |
实验
2 乱序流:event-time vs processing-time 窗口输出对比
3 三种窗口 state 大小 / 输出条数
4 kafka-dump-log.sh segment 解读
5 ISR 收缩 + consumer rebalance lag
6 事务 abort + read_committed 验证
8 shuffle 策略下 subtask 记录分布
10 checkpoint interval vs latency / duration
12 HashMap vs RocksDB checkpoint 大小与耗时
13 大窗口 state 下 RocksDB 磁盘曲线
15 Kafka→Kafka EOS,杀 TM 后计数验证
16 Debezium MySQL CDC 事件 dump
17 调 checkpoint 间隔对小文件数的影响(与 lakehouse/17 同口径)

每个 benchmark:CPU、内存、OS、组件版本、数据规模、采样轮次(≥3,取中位数);无法在本机执行的实验按 lakehouse/19 惯例写清环境限制,给出可复现步骤但不伪造输出。


八、系列联动

系列 联动
db/lakehouse/ 第 19 章入湖侧 ↔︎ 本系列 15/17 引擎侧;第 11 章 CAS 提交 ↔︎ 2PC
db/lsm-tree/ MemTable/SSTable/compaction ↔︎ RocksDB state backend
distributed/ 日志复制、一致性 ↔︎ Kafka ISR、EOS 语义
db/columnar-engine/ 批式 OLAP ↔︎ 流式预聚合/物化
observability/ metrics/traces ↔︎ Flink metrics、lag 监控

九、边界

不承诺

承诺


十、写作顺序

  1. index.md(已完成则随 PLAN 同步)
  2. 第 1 篇(全景,不依赖实测)
  3. 第 4、5、6 篇(Kafka 层,Docker 环境可共享)
  4. 第 2、3 篇(时间语义,需 Flink)
  5. 第 7、8、9 篇(Flink 基础)
  6. 第 10、11 篇(checkpoint/savepoint)
  7. 第 12、13 篇(RocksDB state)
  8. 第 14、15 篇(语义与 2PC)
  9. 第 16、17 篇(CDC 与入湖深化,回调 lakehouse)
  10. 第 18 篇(背压、故障、对照收束)

十一、已确认决策(2026-07-01)

  1. 系列规模18 篇(与 zero-trust/agent-identity 体量接近,比 lakehouse 精简;Kafka 4–6 合并为 3 篇而非单独 4 篇)。
  2. 版本锚定:Kafka 3.x(KRaft);Flink 1.20+ / 2.x 主线,API 变更处标注版本边界。
  3. 引擎主线:Flink DataStream;SQL 仅作示例,不单独成篇。
  4. 入湖边界:第 17 篇与 lakehouse/19 对读,不重复表格式提交协议全文。
  5. RocksDB:第 12–13 篇衔接 db/lsm-tree,不另开 RocksDB 独立系列(该系列留作可选后续)。

规划版本:v1,2026-07-01(全 18 篇)
目录:post/stream-processing/

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-07-01 · database / distributed

【流式数据处理】Kafka · Flink · 状态 · Exactly-Once

承接数据湖流式入湖:从 Kafka 日志与副本语义,到 Flink 事件时间、watermark、窗口、RocksDB 状态与 checkpoint,再到端到端 exactly-once 与 Debezium CDC 入湖。面向数据平台与实时工程师,补全批式湖仓之外的实时计算层。


By .