Skip to content

从 0 到 1 学习 Kafka

一套面向零基础、覆盖底层原理与面试高频考点的中文 Kafka 系统教程——把 Kafka 当作「分布式提交日志 + 消息中间件 + 流处理平台」三位一体来讲,让你看完会用、用了懂原理、面试能答上。

status kafka python license


✨ 教程亮点

  • 📚 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 写,复制即用,从不写伪代码;关键章节补 Java kafka-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.yml9092: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 1Ch 01 Kafka 是什么 & 为什么快五大性能基石、与其它 MQ 定位差异
Day 2Ch 02 核心概念与架构总览Broker/Topic/Partition/Offset/Group 全景图
Day 3Ch 04 Producer 深入acks / linger.ms / batch.size / 幂等 / 压缩
Day 4Ch 05 Consumer 深入poll 模型 / Offset 提交 / auto.offset.reset
Day 5Ch 09 副本机制与 ISRHW / LEO / Leader Epoch / min.insync.replicas
Day 6Ch 11 消费者组与 Rebalance4 大分配策略 / Cooperative / Static Membership
Day 7Ch 13 幂等与事务:EOS 真相PID Fencing / 两阶段提交 / read_committed

路线 B · 「3 周系统化」(推荐路线)

按 1 → 21 章顺序,每天 1 章。

路线 C · 「面试冲刺」(适合 1-2 周面前刷题)

  1. 通读 interview.md 的「高频题 Top 30」与每个分类的前 5 道
  2. 重点章节深读:Ch 09 / Ch 10 / Ch 11 / Ch 13
  3. 横向对比章节:appendix_kafka_vs_others.md 全文
  4. 工具书扫读:appendix_cheatsheet.md 命令 / 配置 / JMX 三张速查表
  5. 排障背诵:appendix_pitfalls.md 25 个案例的「症状 + 根因」

路线 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 第六节大纲对齐,标题保持一致;点击列内链接直达。

#主题一句话简介演示页 / 代码亮点
01Kafka 是什么 & 为什么快把 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)实录
04Producer 深入acks / linger.ms / batch.size / compression / partitioner / 幂等 PID 一次讲透不同压缩算法吞吐压测
05Consumer 深入subscribe vs assign / poll 循环 / Offset 提交 / auto.offset.reset / 心跳 / max.poll.interval.ms自动 / 手动提交丢消息对比
06Topic 设计与分区策略分区数 / 副本数 / 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副本机制与 ISRLeader / Follower / ISR / HW / LEO / Leader Epoch / unclean.leader.election 全套ISR 抖动时序动画
10Controller 与 KRaft从 ZK 时代到 KRaft 的演进、Controller Quorum、Raft 选举、迁移路径KRaft 选举动画
11消费者组与 RebalanceJoinGroup / SyncGroup / Heartbeat 协议;Range / RoundRobin / Sticky / Cooperative 分配策略;Static Membership4 种策略再分配动画
12Offset 与「消息语义」At Most/Least Once / Exactly Once 工程含义;自动提交陷阱;幂等设计模式seek 到任意 offset/timestamp
13幂等与事务:EOS 真相幂等 Producer + 事务 Producer + Transaction Coordinator + __transaction_state + read_committed 全链路两阶段提交时序动画
14Log Compaction 与 Tombstonedelete vs compact vs compact,delete__consumer_offsets / __transaction_state 为什么必须用 compactCompaction 动画
15安全与多租户SSL / SASL / ACL / Quota;最小权限模型ACL 设计模板
16Kafka ConnectSource / Sink Connector;Standalone vs Distributed;Debezium CDC;SMT;DLQDebezium MySQL→Kafka 实录
17Kafka Streams 与 ksqlDB流-表二元性;KStream / KTable / GlobalKTable;状态算子 + RocksDB;窗口;ksqlDB 入门实时 Top-N 演示
18Schema 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.md21 章学习路线图:6 阶段拆解 + 每阶段练习任务 + 时间预算
interview.md11 大主题 · 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」

🧰 环境要求

组件推荐版本说明
Kafka3.8+ / 4.0教程基于 KRaft 模式;ZK 模式仅在第 10 章对比时简单提及
Python3.10+3.9 也能跑,但部分类型注解会警告
confluent-kafka2.5+基于 librdkafka,性能与语义完整度最好;不要装 kafka-python
Java11 / 17(可选)仅在 Kafka Streams 章节需要
Docker / Compose24+ / 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 -dkafka1 一直 Restarting?

A:99% 是数据卷 ID 不一致。KAFKA_KRAFT_CLUSTER_ID 一旦写入数据卷就不能换。处理:

bash
docker compose down -v   # 清空数据卷
docker compose up -d

Q2:宿主机能 telnet 9092 通,但 confluent-kafka Python 连不上?

A:99% 是 advertised.listeners 写的是容器名。如果你从容器外(宿主机 Python)连,要确保 advertised 端含 EXTERNAL://localhost:9092(本仓库默认已经是)。

Q3:kafka-topics.shReplication factor: 3 larger than available brokers: 1

A:当前集群活着的 Broker 不到 3 个。docker compose ps 排查;或者建 Topic 时 --replication-factor 1(仅学习)。

Q4:消费组一直 range/roundrobinSubscribed 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/20

Q7:教程默认用 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
SchemaAvro(默认)+ 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.benchlearn.13.eos),同集群练习不会互相覆盖。


🤝 如何贡献 / 反馈

  • 发现错别字、命令报错、脚本兼容性问题?欢迎直接 PR / Issue。
  • 想新增「真实业务场景案例」「面试真题」「踩坑案例」?参考已有章节结构,保持「概念 → 类比 → 命令/代码 → 底层原理 → 与其他 MQ 对比 → 小结」六段式即可。
  • 长期欢迎补充 Kafka 4.0 新特性Tiered StorageStrimzi / KEDA on K8sCruise Control 自动平衡专题。

🙏 致谢与参考

本教程在结构、举例、面试题选型上参考了大量优秀资料,向社区致敬:

官方资料

推荐书籍

  • 《Kafka 权威指南》(第 2 版)— Gwen Shapira / Todd Palino / Rajini Sivaram / Krit Petty
  • 《Kafka Streams in Action》— Bill Bejeck
  • 《Designing Event-Driven Systems》— Ben Stopford(Confluent 免费电子书
  • 《Kafka 核心源码解读》— 胡夕

在线资源

工具


📄 License

本教程内容采用 MIT License 开源,欢迎自由复制、修改、再分发,请保留出处。


祝你早日成为团队里的 Kafka 专家!开始你的 0 → 1 之旅吧 → Ch 1: Kafka 是什么 & 为什么快 🚀