全书概览
| 项目 | 内容 |
|---|---|
| 书稿 | 《Java 消息中间件·可靠消息与消费治理》 |
| 篇数 | 50 篇(15 章 45 节 + 序、前言、目录 + 附录 A/B) |
| 领域 | 责任边界、幂等与事务、消费治理、数据链路、顺序与大小、平台治理、演练与验收 |
| 贯穿项目 | libraryd-mq —— 借阅、归还、预约、库存调整四类事件的可靠性要求 |
| 阅读方式 | 从目录篇 进入按顺序通读,或按问题跳读 |
| 主线版本 | JDK 25 LTS(Temurin 25.0.5+8)、Kafka 4.3.0(KRaft only)、kafka-clients 4.3.0 |
| 上级专题 | 书稿专题 |
三卷分工
| 卷 | 书名 | 关注点 |
|---|---|---|
| 卷一 | 《Java 消息中间件·Kafka 内核与客户端》 | 一条消息从 send 到落盘发生了什么 |
| 卷二 | 《Java 消息中间件·可靠消息与消费治理》 | 怎么做到不丢、不重、可恢复、可治理 |
| 卷三 | 《Java 消息中间件·事件驱动架构》 | 怎么用事件设计系统 |
本卷不展开服务端机制与客户端源码,需要时写「卷一第 N 章」;不展开架构范式,需要时写「卷三第 N 章」。
全书目录
前置
| 篇 | 文章 | 核心内容 |
|---|---|---|
| — | 序:可靠性是设计出来的,不是配置出来的 | 三个误判、四段责任模型、四类问题的定义 |
| — | 前言:实验环境与故障注入口径 | 单节点与三节点底座、stop/kill/pause/改配置 |
| — | 目录与学习路径 | 三条路径、五部分、与卷一卷三衔接 |
第一部分:可靠性语义(第 1–3 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 1.1 | 1.1 端到端可靠性的责任边界 | 四段责任表、每段的失败模式 |
| 1.2 | 1.2 生产端:acks、重试与幂等 | acks=all 的三个前提、重试窗口、幂等边界 |
| 1.3 | 1.3 消费端:手动提交与位移管理 | 提交时机、自动提交丢什么、提交失败重试 |
| 2.1 | 2.1 重复的四种来源 | 生产重试、再平衡、位移回退、下游重放 |
| 2.2 | 2.2 幂等消费:唯一键、状态机与去重表 | 三种实现的成本、TTL 与容量、幂等迁移 |
| 2.3 | 2.3 恰好一次的两种实现与成本 | 事务与业务幂等的边界对照 |
| 3.1 | 3.1 事务生产者与 read_committed | 事务流程、两种隔离级别看到什么 |
| 3.2 | 3.2 事务超时、fencing 与 abort | 超时、僵尸写入、abort 后的数据形态 |
| 3.3 | 3.3 事务的性能与运维代价 | 额外请求与延迟、状态主题、何时不该用 |
第二部分:消费治理(第 4–6 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 4.1 | 4.1 消费组设计:按业务还是按分区 | 一个组一个职责、能力一致、多组订阅代价 |
| 4.2 | 4.2 分配策略与消费者倾斜 | 四种 assignor 的分配结果与倾斜观测 |
| 4.3 | 4.3 扩缩容与优雅停机 | 再平衡触发、停机姿势、poll 超时踢出 |
| 5.1 | 5.1 lag 的三种口径与误读 | 三种口径的数值差异与选型 |
| 5.2 | 5.2 积压处置:扩容、跳过与降级 | 能否追上的判断、扩容天花板、跳过前提 |
| 5.3 | 5.3 消费速率控制与背压 | pause/resume、用户限速、下游慢时别硬拉 |
| 6.1 | 6.1 死信队列的设计 | 死信内容、必要元信息、回灌 |
| 6.2 | 6.2 重试主题与退避 | 多级重试、退避位置、重试放大 |
| 6.3 | 6.3 毒消息隔离与人工干预 | 一条消息阻塞分区、隔离手段、回灌幂等 |
第三部分:数据链路(第 7–9 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 7.1 | 7.1 Outbox 模式 | 同库同事务、轮询发布、崩溃恢复 |
| 7.2 | 7.2 CDC:增量快照与变更捕获 | 日志挖掘与轮询、快照衔接、op 语义 |
| 7.3 | 7.3 事件溯源入门 | 事件为唯一事实、重放重建、与 outbox 的区别 |
| 8.1 | 8.1 领域事件建模 | 过去时、包含与不包含、事件 ID 与因果 ID |
| 8.2 | 8.2 schema 演进与兼容性 | 四类变更的兼容性实测 |
| 8.3 | 8.3 Schema Registry 的取舍 | 集中管理的成本、自管方案、检查位置 |
| 9.1 | 9.1 Saga:编排与协同 | 两种形态、步骤与补偿、失败回滚 |
| 9.2 | 9.2 补偿事务的幂等 | 补偿重复、补偿失败兜底、与重试的区别 |
| 9.3 | 9.3 最终一致性的度量 | 一致性延迟测量、窗口告警、对账 |
第四部分:顺序、批量与性能(第 10–12 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 10.1 | 10.1 顺序的粒度与代价 | 三种顺序粒度、in-flight 与乱序 |
| 10.2 | 10.2 热点分区与 key 设计 | 单调 key 倾斜、加盐、二次分区 |
| 10.3 | 10.3 重分区与历史数据 | key→分区映射变化、历史数据处理、迁移 |
| 11.1 | 11.1 消息大小与批量参数 | 三个上限的联动、超限表现 |
| 11.2 | 11.2 压缩算法选择 | 四种算法的压缩比与 CPU、负收益场景 |
| 11.3 | 11.3 大消息的 claim-check 模式 | 指针与内容分离、取回失败、一致性 |
| 12.1 | 12.1 消费者多线程模型 | 每线程一消费者与工作线程、顺序保持 |
| 12.2 | 12.2 异步提交的陷阱 | 静默失败、提交与处理错位 |
| 12.3 | 12.3 消费端性能调优 | 三组参数的联合调参 |
第五部分:治理与验收(第 13–15 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 13.1 | 13.1 多租户与配额 | 字节与请求配额、降速而非拒绝 |
| 13.2 | 13.2 SASL/ACL 与传输加密 | 机制选择、ACL 粒度、加密代价 |
| 13.3 | 13.3 跨集群复制 | MirrorMaker2 模型、复制延迟、切换位移 |
| 14.1 | 14.1 故障注入:broker 宕机 | 宕机观测、客户端重试、恢复追赶 |
| 14.2 | 14.2 故障注入:消费端崩溃 | kill -9 的重复范围、session 超时 |
| 14.3 | 14.3 恢复演练与 RTO/RPO | RTO/RPO 定义、演练脚本、时间线 |
| 15.1 | 15.1 可靠性验收清单 | 三十条检查项与逐条判据 |
| 15.2 | 15.2 容量与成本核算 | 三档可靠性方案的成本对照 |
| 15.3 | 15.3 libraryd-mq 卷二验收 | 验收场景、判据、遗留风险 |
附录
| 篇 | 文章 | 核心内容 |
|---|---|---|
| A | 附录 A 可靠性配置矩阵 | 三端配置表,每项标「保什么、代价是什么」 |
| B | 附录 B 幂等与事务模板 | 去重表、状态机、outbox、事务生产者 |
怎么读
- 两小时版:序 → 1.1 → 2.3 → 15.1。
- 落地一条链路:1 → 2 → 4 → 6 → 7。
- 准备演练与验收:14 章三节 → 5.1 → 6.3 → 12.2。
详细说明见目录与学习路径 。
故意没写的东西
- 分区、副本、ISR、KRaft、日志段等机制 → 卷一。
- 生产者与消费者的源码走读 → 卷一。
- CQRS、事件驱动拓扑、Kafka Streams → 卷三。
- Spring Kafka 与任何 ORM → 全书不写,全文只用
kafka-clients与 JDK 标准库。