Kafka 核心技术与实战 · 深度学习指南(细化版)
作者:胡夕(Apache Kafka 中国社区活跃贡献者)| 真实结构:42 讲正文 + 加餐(共 45 个文件) 定位:「吞吐之王」消息队列的系统课——从术语、集群部署、生产者/消费者,到副本机制、控制器、重平衡、监控调优,直至 Kafka Streams。
一、这门课到底讲什么
Kafka 是分布式消息引擎的事实标准。这门课教你「用好 Kafka + 看懂 Kafka」:生产者怎么保证不丢消息、消费者组怎么工作、副本怎么同步、重平衡为什么会坑人、线上怎么监控调优。
二、真实讲次大纲(按模块)
模块 1:基础与部署(第 1–8 讲)
| 讲次 | 核心知识点 |
|---|---|
| 01 | 消息引擎系统 ABC(为什么用 MQ:异步/削峰/解耦) |
| 02 | 快速搞定 Kafka 术语(Topic/Partition/Offset/Consumer Group) |
| 03–04 | Kafka 不只是消息引擎;怎么选 Kafka 版本 |
| 05 | Kafka 版本号 |
| 06 | 线上集群部署方案 |
| 07–08 | 最最最重要的集群参数配置(上/下) |
模块 2:生产者(第 9–14 讲)
| 讲次 | 核心知识点 |
|---|---|
| 09 | 消息分区机制(key 哈希/轮询/自定义) |
| 10 | 生产者压缩算法 |
| 11 | 无消息丢失配置怎么实现(acks、重试、幂等) |
| 12 | 客户端高级功能 |
| 13 | Java 生产者如何管理 TCP 连接 |
| 14 | 幂等生产者和事务生产者 |
模块 3:消费者(第 15–22 讲)
| 讲次 | 核心知识点 |
|---|---|
| 15 | 消费者组到底是什么 |
| 16 | 位移主题(__consumer_offsets) |
| 17 | 消费者组重平衡能避免吗 |
| 18 | 位移提交那些事(自动/手动) |
| 19 | CommitFailedException 怎么处理 |
| 20–21 | 多线程消费者、TCP 连接管理 |
| 22 | 消费进度监控 |
模块 4:副本与控制器(第 23–27 讲)
| 讲次 | 核心知识点 |
|---|---|
| 23 | 副本机制详解(Leader/Follower/ISR) |
| 24 | 请求是怎么被处理的 |
| 25 | 重平衡全流程解析 |
| 26 | Kafka 控制器(Controller) |
| 27 | 高水位(HW)和 Leader Epoch |
模块 5:运维与调优(第 28–38 讲)
| 讲次 | 核心知识点 |
|---|---|
| 28–30 | 主题管理、动态配置、重设消费位移 |
| 31–32 | 工具脚本、KafkaAdminClient |
| 33–34 | 认证机制、云环境授权 |
| 35 | 跨集群备份 MirrorMaker |
| 36–37 | 监控 Kafka、主流监控框架 |
| 38 | 调优 Kafka |
模块 6:Kafka Streams(第 39–42 讲)
| 讲次 | 核心知识点 |
|---|---|
| 39 | 从 0 搭建实时日志流处理平台 |
| 40–42 | Kafka Streams vs 其他流处理平台、DSL 开发、金融应用 |
三、必须吃透的核心知识点
-
为什么快(贯穿全课):顺序写磁盘 + 页缓存 + 零拷贝 + 批量。Kafka 把「写」做成顺序追加,单 Broker 就能百万级吞吐。
-
消息不丢配置(第 11 讲):生产者
acks=all+ 重试 + 幂等;Broker 副本数 ≥ 2、min.insync.replicas≥ 2;消费者「先消费再提交位移」改为「先提交再消费」或手动提交。 -
消费者组与重平衡(第 15、17、25 讲):组内消费者数量变化会触发 Rebalance(重新分配分区),期间「全组停止消费」——这就是线上最常见的「元凶」。用静态成员、增加 session 超时等缓解。
-
副本与 ISR(第 23 讲):每个分区一个 Leader + 多个 Follower,只有「与 Leader 同步」的副本在 ISR 里。
acks=all要等 ISR 都确认。 -
位移提交(第 18 讲):offset 提交时机决定「最多一次 / 至少一次 / 恰好一次」语义。手动提交 + 幂等是「至少一次」的正确姿势。
四、引发思考
- Kafka 为什么比 RabbitMQ 吞吐高那么多?(顺序写、零拷贝、批量、页缓存)
- 消息「不丢」和「不重」能同时做到吗?「恰好一次」的代价是什么?
- 重平衡为什么会导致「消费停滞」?你会怎么减少它的发生?
- 位移(offset)提前提交会丢消息,滞后提交会重复消费——业务上怎么设计幂等?
- ISR 缩小(副本跟不上)时,
acks=all会发生什么?怎么权衡可用性和一致性? - 学完本课,回看阶段七「削峰」,秒杀场景 Kafka 到底怎么挡流量?
五、学完自测
- 能画出 Topic→Partition→Consumer Group 的映射关系
- 能说出「生产者→Broker→消费者」全链路「不丢消息」的配置
- 能解释 Rebalance 的触发条件和影响
- 能说出「最多一次/至少一次/恰好一次」三种语义的实现
- 能解释 Kafka 顺序写和零拷贝为什么快
配套:本地起一个单机 Kafka,写个生产者和消费者,观察 offset 提交和分区分配。