一句话定位
Kafka 不只是消息队列——它是一个分布式提交日志系统,既能做 MQ(解耦、削峰),也能做流处理(实时 ETL、事件驱动架构).本篇给出完整学习路径,后续每篇对应一个主题.
为什么 Go 后端需要学 Kafka
| 场景 |
没有 Kafka 的做法 |
引入 Kafka 后 |
| 服务间异步通知 |
HTTP 回调 / 轮询,耦合重,失败难重试 |
生产者发消息,消费者按需消费,天然解耦 |
| 流量削峰 |
上游打爆下游,限流丢请求 |
消息堆积在 broker,下游按自身速率消费 |
| 数据管道 |
各业务自己写同步脚本,格式混乱 |
统一走 Kafka topic,下游 consumer 各取所需 |
| 事件溯源 / 审计 |
数据库 binlog 或手写日志 |
Kafka 天然保留有序事件流,可回放 |
阶段一 · 基础与核心模型
目标:能用 Go 写出生产可用的 producer/consumer,理解 Kafka 的核心抽象.
| 序号 |
主题 |
核心问题 |
| 01 |
本篇:学习大纲 |
全局地图,学什么、为什么学、怎么学 |
| 02 |
核心概念:Broker、Topic、Partition、Offset |
一条消息从生产到消费经历了什么? |
| 03 |
生产者模型与分区策略 |
消息怎么决定写到哪个 partition?acks 语义是什么? |
| 04 |
消费者与 Consumer Group |
为什么需要 group?rebalance 怎么回事?offset 提交策略? |
| 05 |
Go 客户端实战(sarama / confluent-kafka-go / franz-go) |
用哪个库?怎么配?怎么优雅关停? |
| 06 |
消息可靠性:不丢、不重、顺序性 |
At-least-once vs exactly-once,幂等生产者 |
| 07 |
本地开发环境与运维基础 |
docker-compose 起集群,常用 CLI 工具,监控指标 |
阶段二 · 架构原理与调优
目标:理解 Kafka 为什么快、怎么保证可靠性,能做容量规划和性能调优.
| 序号 |
主题 |
核心问题 |
| 08 |
存储引擎:日志分段、索引、零拷贝 |
为什么 Kafka 吞吐这么高?磁盘顺序写 + sendfile 原理 |
| 09 |
副本机制与 ISR |
leader/follower 怎么同步?什么时候消息才算"已提交"? |
| 10 |
Controller 与元数据管理 |
ZooKeeper 模式 vs KRaft 模式,controller 选举 |
| 11 |
分区再平衡深入 |
Eager vs Cooperative rebalance,sticky assignor |
| 12 |
生产调优:批量、压缩、linger.ms、buffer.memory |
怎么榨干吞吐?延迟与吞吐的取舍 |
| 13 |
消费调优:fetch 参数、并发模型、背压处理 |
Go 消费者怎么做 worker pool?怎么处理慢消费? |
| 14 |
事务与 Exactly-Once Semantics(EOS) |
跨分区原子写入,事务型 producer/consumer |
阶段三 · 流处理与高级应用
目标:从"消息队列"视角跳出,理解 Kafka 作为流处理平台的能力.
| 序号 |
主题 |
核心问题 |
| 15 |
Kafka 作为事件流平台:设计哲学 |
Log 即数据库,事件驱动 vs 请求驱动 |
| 16 |
Kafka Streams 概念与 Go 中的替代方案 |
有状态流处理、窗口聚合、KTable;Go 生态怎么做? |
| 17 |
Connect:数据集成框架 |
Source/Sink connector,CDC 管道(Debezium) |
| 18 |
Schema 管理与数据治理 |
Schema Registry,Protobuf/Avro 演进,兼容性策略 |
| 19 |
多集群与跨机房:MirrorMaker 2 |
异地多活、灾备,数据同步拓扑 |
| 20 |
在微服务架构中落地 Kafka |
事件溯源、Saga、Outbox 模式,与 gRPC 服务的配合 |
学习方法建议
┌─────────────────────────────────────────────────┐ │ 概念理解 → 本地实验 → 源码印证 → 生产踩坑回顾 │ └─────────────────────────────────────────────────┘
|
- 每篇都有 Go 代码:不写 Java,所有示例用 Go 客户端(主要用 franz-go,轻量且现代)
- 对比你熟悉的:会用 Redis Stream、gRPC、channel 做类比,降低认知负担
- 先 black-box 再 white-box:先会用,再拆原理,最后看关键源码路径
- docker-compose 一把梭:本地 3-broker 集群 + kafka-ui,所有实验可复现
前置知识检查
| 你需要知道的 |
不知道也行,会顺带讲 |
| Go 基础(goroutine、channel、context) |
TCP 细节(Kafka 自定义协议会简要说明) |
| Docker 基础(能跑 compose) |
JVM 调优(我们不写 Java) |
| 分布式系统直觉(CAP、最终一致性) |
ZooKeeper 内部原理(只需知道它是协调服务) |