主题
从 0 到 1 学习 Kafka
一套面向零基础、覆盖底层原理与面试高频考点的中文 Kafka 系统教程——把 Kafka 当作「分布式提交日志 + 消息中间件 + 流处理平台」三位一体来讲,让你看完会用、用了懂原理、面试能答上。
✨ 教程亮点
- 📚 21 章正文:从 Hello Kafka 到 KRaft / EOS / Streams / Connect,由浅入深一气呵成
- 🧱 三大附录工具书:命令 & 参数 & JMX 速查 / 与其它 MQ 全维度对比 / 25+ 真实踩坑案例
- 📄 150+ 文件:每章
.md学习文档 +demo.html可视化演示 +code/真实可跑脚本 +init.sh一键建 Topic - 🎮 21 个交互演示页:纯 HTML/JS,零依赖,浏览器双击即开,点一下看一步,把「顺序写 / 零拷贝 / Rebalance / ISR / KRaft Raft 选举 / 两阶段提交」都做成动画
- 💼 210+ 道面试题:按 11 大主题汇总(
interview.md),全部带「考察点 / 标准答案 / 加分项 / 易错点」四件套 - 🛠 真实可跑代码:100% 用 Python
confluent-kafka写,复制即用,从不写伪代码;关键章节补 Javakafka-clients/ Kafka Streams 对照 - 🍞 生活化类比:Topic ≈「邮局信件分类柜」、Partition ≈「分类柜里的多条流水线」、Offset ≈「流水线上的流水号」、ISR ≈「可信快递员名单」、HW ≈「最高送达流水号」、Compaction ≈「同把钥匙只留最新配方」、EOS ≈「银行转账要么一次到账要么一次没有」
- 🥊 横向对比 RabbitMQ / RocketMQ / Pulsar / Redis Stream / NATS:每章带「📌 与其他 MQ 的差别」小框
- 📦 一键开发环境:根目录
docker-compose.yml一行起 3 Broker(KRaft)+ Kafka UI + Schema Registry,不用装 ZooKeeper
🚀 快速开始(3 步上手)
第 1 步:拉起 3 节点 Kafka 集群
只需要装好 Docker 24+ 与 Compose v2,剩下交给本仓库的 docker-compose.yml:
bash
# 进入教程根目录
cd /path/to/learnNote/kafka
# 启动 3 Broker(KRaft 模式)+ Kafka UI + Schema Registry
docker compose up -d
# 等到所有容器 healthy(大约 30 秒)
docker compose ps
# 浏览器打开管理台(看到 3 个 Broker 即 OK)
# http://localhost:8080🐳 集群默认监听
9092 / 9094 / 9096三个 Broker 端口;8080是 Kafka UI;8081是 Schema Registry。 ⛔ 如果 9092 被本地其他 Kafka 占用,把docker-compose.yml里9092:9092改成9192:9092,并export KAFKA_BOOTSTRAP=127.0.0.1:9192。
第 2 步:装 Python 依赖
bash
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt # confluent-kafka / faust-streaming / fastavro 等第 3 步:跑第一个 Hello Kafka
bash
# 创建第一个 Topic(3 分区 / 3 副本)
docker exec -it kafka1 /opt/kafka/bin/kafka-topics.sh \
--bootstrap-server localhost:9092 \
--create --topic learn.01.hello \
--partitions 3 --replication-factor 3
# 跑入门示例:1 个 Producer + 1 个 Consumer(同进程)
python 01_intro/code/hello_kafka.py看到控制台依次打印「✅ 已发送 10 条消息」+「📥 收到 partition=X offset=Y key=...」就算环境跑通啦 🎉。
💡 不想装 Docker?只要本机 / 公司内网有任意可达的 Kafka 集群,把
KAFKA_BOOTSTRAP环境变量指过去即可。
📂 目录结构总览
learnNote/kafka/
├── README.md ← 你正在看的这份门面
├── docker-compose.yml ← 一键起 3 Broker + KRaft + Kafka UI + Schema Registry
├── requirements.txt ← 21 章统一的 Python 依赖
├── task.md ← 教程总纲(产品定位 + 章节大纲)
├── 0_learn_plan.md ← 21 章学习路线图(含每周练习任务)
├── interview.md ← 11 大主题 · 210+ 题面试总索引
├── appendix_cheatsheet.md ← 附录 A:命令 / 参数 / JMX / 错误辞典速查
├── appendix_kafka_vs_others.md ← 附录 B:Kafka vs RabbitMQ/RocketMQ/Pulsar/Redis Stream/NATS
├── appendix_pitfalls.md ← 附录 C:25+ 个真实踩坑案例集
│
├── 01_intro.md ← 第 1 章正文:Kafka 是什么 & 为什么快
├── 01_intro/ ← 第 1 章配套
│ ├── demo.html ← 「为什么 Kafka 快」可视化
│ └── code/hello_kafka.py
├── 02_architecture.md
├── 02_architecture/
│ ├── demo.html ← Broker / Topic / Partition / Replica 全景图
│ └── code/cluster_probe.py
├── 03_cli_basics.md
├── 03_cli_basics/
├── 04_producer.md
├── 04_producer/
├── ... 同样的结构重复到第 21 章 ...
└── 21_project/ ← 综合实战(订单总线 / CDC / IoT 任选)
├── README.md
├── docker-compose.yml
└── code/💡 每章的代码 / 命令 / demo 都自包含,可以从任意章节切入,不强制顺序。
🗺 学习路线(多套,按需选择)
路线 A · 「7 天速成」(适合面试急救 / 已经熟悉一种 MQ 的同学)
只读 7 章 +
interview.md高频题 Top 30 +appendix_cheatsheet.md,每天 2 ~ 3 小时。
| 天 | 章节 | 关键产出 |
|---|---|---|
| Day 1 | Ch 01 Kafka 是什么 & 为什么快 | 五大性能基石、与其它 MQ 定位差异 |
| Day 2 | Ch 02 核心概念与架构总览 | Broker/Topic/Partition/Offset/Group 全景图 |
| Day 3 | Ch 04 Producer 深入 | acks / linger.ms / batch.size / 幂等 / 压缩 |
| Day 4 | Ch 05 Consumer 深入 | poll 模型 / Offset 提交 / auto.offset.reset |
| Day 5 | Ch 09 副本机制与 ISR | HW / LEO / Leader Epoch / min.insync.replicas |
| Day 6 | Ch 11 消费者组与 Rebalance | 4 大分配策略 / Cooperative / Static Membership |
| Day 7 | Ch 13 幂等与事务:EOS 真相 | PID Fencing / 两阶段提交 / read_committed |
路线 B · 「3 周系统化」(推荐路线)
按 1 → 21 章顺序,每天 1 章。
路线 C · 「面试冲刺」(适合 1-2 周面前刷题)
- 通读
interview.md的「高频题 Top 30」与每个分类的前 5 道 - 重点章节深读:Ch 09 / Ch 10 / Ch 11 / Ch 13
- 横向对比章节:
appendix_kafka_vs_others.md全文 - 工具书扫读:
appendix_cheatsheet.md命令 / 配置 / JMX 三张速查表 - 排障背诵:
appendix_pitfalls.md25 个案例的「症状 + 根因」
路线 D · 「按角色挑章」
| 角色 | 必读章节 |
|---|---|
| 业务后端(只用客户端 SDK) | 01, 02, 03, 04, 05, 06, 12, 13 |
| 大数据 / 数仓 | 01, 02, 06, 07, 14, 16, 17, 18, 21 |
| 平台 / SRE / 中间件 | 02, 07, 08, 09, 10, 11, 15, 19, 20 |
| 架构师 / 选型 | 01, 02, 06, 09, 10, 13, appendix_kafka_vs_others.md |
📖 每章一句话简介
表格按
task.md第六节大纲对齐,标题保持一致;点击列内链接直达。
| # | 主题 | 一句话简介 | 演示页 / 代码亮点 |
|---|---|---|---|
| 01 | Kafka 是什么 & 为什么快 | 把 Kafka 当作分布式提交日志而不是「队列」来理解,搞清楚顺序写 / PageCache / 零拷贝 / 批量 / 压缩五大性能基石 | 顺序写 vs 随机写量级对比动画 |
| 02 | 核心概念与架构总览 | 一张图看懂 Broker / Topic / Partition / Replica / Offset / Group / Coordinator / Controller 全景 | 集群拓扑全景动画 |
| 03 | 命令行与客户端基础 | 把 kafka-topics.sh / kafka-console-producer/consumer.sh / kafka-consumer-groups.sh 玩到肌肉记忆 | 命令行三段式(建 Topic → 收发 → 查 Lag)实录 |
| 04 | Producer 深入 | acks / linger.ms / batch.size / compression / partitioner / 幂等 PID 一次讲透 | 不同压缩算法吞吐压测 |
| 05 | Consumer 深入 | subscribe vs assign / poll 循环 / Offset 提交 / auto.offset.reset / 心跳 / max.poll.interval.ms | 自动 / 手动提交丢消息对比 |
| 06 | Topic 设计与分区策略 | 分区数 / 副本数 / Key 怎么选;min.insync.replicas 的意义;什么时候要重建 Topic 而不是加分区 | Key 热点可视化 |
| 07 | 存储与日志格式 | Topic-Partition-Segment 三层结构;.log / .index / .timeindex / leader-epoch-checkpoint;V0/V1/V2 RecordBatch 格式 | kafka-dump-log.sh 真实解码 |
| 08 | 高吞吐的底层原理 | 顺序写 / PageCache / 零拷贝 sendfile / mmap / 批量压缩在三端的协同 | 4 次拷贝 vs 2 次拷贝动画 |
| 09 | 副本机制与 ISR | Leader / Follower / ISR / HW / LEO / Leader Epoch / unclean.leader.election 全套 | ISR 抖动时序动画 |
| 10 | Controller 与 KRaft | 从 ZK 时代到 KRaft 的演进、Controller Quorum、Raft 选举、迁移路径 | KRaft 选举动画 |
| 11 | 消费者组与 Rebalance | JoinGroup / SyncGroup / Heartbeat 协议;Range / RoundRobin / Sticky / Cooperative 分配策略;Static Membership | 4 种策略再分配动画 |
| 12 | Offset 与「消息语义」 | At Most/Least Once / Exactly Once 工程含义;自动提交陷阱;幂等设计模式 | seek 到任意 offset/timestamp |
| 13 | 幂等与事务:EOS 真相 | 幂等 Producer + 事务 Producer + Transaction Coordinator + __transaction_state + read_committed 全链路 | 两阶段提交时序动画 |
| 14 | Log Compaction 与 Tombstone | delete vs compact vs compact,delete;__consumer_offsets / __transaction_state 为什么必须用 compact | Compaction 动画 |
| 15 | 安全与多租户 | SSL / SASL / ACL / Quota;最小权限模型 | ACL 设计模板 |
| 16 | Kafka Connect | Source / Sink Connector;Standalone vs Distributed;Debezium CDC;SMT;DLQ | Debezium MySQL→Kafka 实录 |
| 17 | Kafka Streams 与 ksqlDB | 流-表二元性;KStream / KTable / GlobalKTable;状态算子 + RocksDB;窗口;ksqlDB 入门 | 实时 Top-N 演示 |
| 18 | Schema Registry 与数据治理 | Avro / Protobuf / JSON Schema 三选一;BACKWARD / FORWARD / FULL 兼容性策略;_schemas 内部 Topic | 字段加 / 删 / 改兼容性试验 |
| 19 | 可观测性与运维 | 关键 JMX 指标;Prometheus + Grafana;分区重分配 / Leader 迁移 / 副本限流 | Grafana 面板 JSON |
| 20 | 常见踩坑与排障案例集 | 12 个最高频踩坑(更全的 25+ 案例见附录 C) | Rebalance 风暴重现 |
| 21 | 综合实战项目 | 任选其一打通:实时订单总线 / 秒杀削峰 / CDC 实时数仓 / 用户行为埋点 / IoT 上报 | 完整可运行项目 |
🧭 配套元文档
| 文件 | 作用 |
|---|---|
task.md | 教程总纲与产品需求文档:定位、读者画像、章节产出标准、写作执行顺序 |
0_learn_plan.md | 21 章学习路线图:6 阶段拆解 + 每阶段练习任务 + 时间预算 |
interview.md | 11 大主题 · 210+ 题面试索引:按架构 / 存储 / Producer / Consumer / 副本 / KRaft / EOS / 性能 / Streams / 运维 / 横向对比分类 |
appendix_cheatsheet.md | 附录 A · 速查工具书:10 个 kafka-*.sh 命令 + 30 个 Broker 配置 + 20 个 Producer 配置 + 20 个 Consumer 配置 + 30 个 JMX 指标 + 5 个内部 Topic + 15 条错误辞典 + SMT + 版本里程碑 |
appendix_kafka_vs_others.md | 附录 B · 横向对比:Kafka vs RabbitMQ / RocketMQ / Pulsar / Redis Stream / NATS JetStream,覆盖存储 / 消费 / 路由 / 顺序 / 事务 / 延迟 / 死信 / 架构 / 元数据 / 吞吐 / 生态 / 运维 12 大维度 |
appendix_pitfalls.md | 附录 C · 踩坑案例集:25+ 个真实案例,统一「症状 → 现场快照 → 根因 → 解决 → 预防 → 相关参数 → 关联章节」7 段模板,附「上线 Checklist」 |
🧰 环境要求
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| Kafka | 3.8+ / 4.0 | 教程基于 KRaft 模式;ZK 模式仅在第 10 章对比时简单提及 |
| Python | 3.10+ | 3.9 也能跑,但部分类型注解会警告 |
| confluent-kafka | 2.5+ | 基于 librdkafka,性能与语义完整度最好;不要装 kafka-python |
| Java | 11 / 17(可选) | 仅在 Kafka Streams 章节需要 |
| Docker / Compose | 24+ / v2 | 用根目录 docker-compose.yml 起集群 |
| 浏览器 | Chrome / Edge / Firefox 任意 | 打开各章 demo.html、Kafka UI(http://localhost:8080) |
🪟 Windows 用户:强烈建议在 WSL2 里跑;Native Windows 也能跑,shell 脚本(第 19 章)改用 PowerShell 等价命令。
❓ 常见问题 FAQ
Q1:docker compose up -d 后 kafka1 一直 Restarting?
A:99% 是数据卷 ID 不一致。KAFKA_KRAFT_CLUSTER_ID 一旦写入数据卷就不能换。处理:
bash
docker compose down -v # 清空数据卷
docker compose up -dQ2:宿主机能 telnet 9092 通,但 confluent-kafka Python 连不上?
A:99% 是 advertised.listeners 写的是容器名。如果你从容器外(宿主机 Python)连,要确保 advertised 端含 EXTERNAL://localhost:9092(本仓库默认已经是)。
Q3:kafka-topics.sh 报 Replication factor: 3 larger than available brokers: 1?
A:当前集群活着的 Broker 不到 3 个。docker compose ps 排查;或者建 Topic 时 --replication-factor 1(仅学习)。
Q4:消费组一直 range/roundrobin 报 Subscribed topic not available?
A:Topic 没建,或者 Broker 把 auto.create.topics.enable 设为了 false(本教程默认关掉)。手动 kafka-topics.sh --create 即可。
Q5:性能压测数字和教程里不一样?
A:完全正常。Kafka 吞吐受磁盘类型 / PageCache / 网络 / Broker 数 / 分区数 / 压缩 / acks / batch.size 影响,关注相对量级与趋势,不要纠结绝对数字。
Q6:能不能跳着学?
A:可以,最低保留:
Ch01 → Ch02 → Ch03 → Ch04 → Ch05 → Ch09 → Ch11 → Ch13
(搞定基础概念 + Producer + Consumer + 副本 + Rebalance + EOS,已是合格 Kafka 用户)
然后按兴趣挑:
做 OLTP 总线 → Ch06/12/13/15
做 流处理 / 数仓 → Ch07/14/16/17/18
做 平台 / SRE → Ch08/09/10/19/20Q7:教程默认用 KRaft,公司里还是 ZK 集群怎么办?
A:本教程命令、客户端代码 100% 兼容 ZK 集群(生产端 API 一致)。差异仅在 Broker 配置与 Controller 行为,第 10 章会对照讲。
🛠 技术栈与版本约定
| 维度 | 选型 |
|---|---|
| Kafka 服务端 | Apache Kafka 3.8 + KRaft |
| 客户端(Python) | confluent-kafka 2.5+(基于 librdkafka) |
| 客户端(Java,对照) | org.apache.kafka:kafka-clients:3.8.0 |
| 流处理(Java) | kafka-streams:3.8.0 |
| 流处理(Python) | faust-streaming + 关键案例补 ksqlDB |
| Schema | Avro(默认)+ Protobuf / JSON Schema 对照 |
| 管理台 | Kafka UI(provectus/kafka-ui) |
| 监控 | JMX → Prometheus JMX Exporter → Grafana |
| 配置命名 | 统一使用官方配置名(bootstrap.servers / acks / enable.idempotence) |
各章脚本统一连接:
bootstrap.servers=127.0.0.1:9092,环境变量KAFKA_BOOTSTRAP兜底。 跨章节 Topic 已加learn.<chapter>.<scene>前缀(如learn.04.bench、learn.13.eos),同集群练习不会互相覆盖。
🤝 如何贡献 / 反馈
- 发现错别字、命令报错、脚本兼容性问题?欢迎直接 PR / Issue。
- 想新增「真实业务场景案例」「面试真题」「踩坑案例」?参考已有章节结构,保持「概念 → 类比 → 命令/代码 → 底层原理 → 与其他 MQ 对比 → 小结」六段式即可。
- 长期欢迎补充 Kafka 4.0 新特性、Tiered Storage、Strimzi / KEDA on K8s、Cruise Control 自动平衡专题。
🙏 致谢与参考
本教程在结构、举例、面试题选型上参考了大量优秀资料,向社区致敬:
官方资料
- Apache Kafka 官方文档 —— 最权威的真理来源
- Kafka Improvement Proposals (KIPs) —— 想搞懂「为什么这么设计」就读 KIP
- Confluent 文档 —— Schema Registry / Connect / ksqlDB 的事实标准
推荐书籍
- 《Kafka 权威指南》(第 2 版)— Gwen Shapira / Todd Palino / Rajini Sivaram / Krit Petty
- 《Kafka Streams in Action》— Bill Bejeck
- 《Designing Event-Driven Systems》— Ben Stopford(Confluent 免费电子书)
- 《Kafka 核心源码解读》— 胡夕
在线资源
- Confluent Developer —— 免费课程 + Hands-on Tutorials
- Kafka Internals 博客系列 —— 关键字搜「internals」
- strimzi.io —— Kafka on Kubernetes 事实标准
- Conduktor Kafkademy —— 互动式入门教程
- zhmin / Kafka 内核源码解析 —— 中文源码导读
工具
- Kafka UI / Redpanda Console —— 浏览器管理台
- kcat (kafkacat) —— 命令行瑞士军刀
- Cruise Control —— LinkedIn 出品的自动平衡神器
- Strimzi —— K8s Operator
- conduktor / Offset Explorer —— 桌面 GUI
📄 License
本教程内容采用 MIT License 开源,欢迎自由复制、修改、再分发,请保留出处。
祝你早日成为团队里的 Kafka 专家!开始你的 0 → 1 之旅吧 → Ch 1: Kafka 是什么 & 为什么快 🚀