主题
29 · Kafka 概览
目标:建立 Topic / Partition / Consumer Group 心智,能口述与 RabbitMQ 的差异,并(可选)跑通最小生产消费。
前置:23 · RabbitMQ · 22 · Docker
官方:Apache Kafka Docs · Go 客户端常见:segmentio/kafka-go · IBM/sarama
1. 先选型,再下手
| RabbitMQ(23) | Kafka | |
|---|---|---|
| 模型 | 队列 + 路由 | 追加日志 + 消费位移 |
| 吞吐 | 中小 | 高吞吐、长留存回放 |
| 消费 | 消费完常即删(视配置) | 多消费者组各自进度 |
| 适合 | 任务分发、复杂路由 | 事件流、审计、大数据管道 |
暑假原则:概念必会,集群实操可缩。机器吃力就画图 + 读官方 Intro,不必硬上 3 Broker。
2. 核心概念(必背)
text
Producer → Topic(分多个 Partition)
│
├─ Consumer Group A(分区内一人消费,组间可重复消费同一消息)
└─ Consumer Group B1
2
3
4
2
3
4
| 概念 | 一句话 |
|---|---|
| Topic | 消息类别名 |
| Partition | 并行与有序单位(分区内有序) |
| Offset | 消费进度 |
| Consumer Group | 负载均衡一组消费者 |
| Retention | 按时间/大小保留,可回放 |
顺序:全局有序难;业务关键键(如 noteId)哈希到同一分区 → 该 key 有序。
3. 与 Rabbit 对照口播
Rabbit 像邮局分拣(Exchange 路由进队列);Kafka 像按主题写的黑匣子磁带,多个部门(Consumer Group)各自用书签(offset)往下听。
4. 最小实操(可选)
单节点学习可用 Bitnami / Apache 官方镜像;示例(示意,版本以你钉死的为准):
yaml
kafka:
image: bitnami/kafka:3.7
ports:
- "9092:9092"
environment:
KAFKA_CFG_NODE_ID: "0"
KAFKA_CFG_PROCESS_ROLES: controller,broker
KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
# …按镜像文档补全 KRaft 必填项1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
kafka-go 消费示意:
go
r := kafka.NewReader(kafka.ReaderConfig{
Brokers: []string{"127.0.0.1:9092"},
Topic: "note.events",
GroupID: "notes-indexer",
})
defer r.Close()
for {
m, err := r.ReadMessage(ctx)
if err != nil {
break
}
log.Printf("offset=%d key=%s value=%s", m.Offset, m.Key, m.Value)
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
生产侧:kafka.Writer 写 Topic + Key。
5. 动手清单
- [ ] 默写:Topic / Partition / Group / Offset
- [ ] 说明:两个 Group 为何都能收到同一条
- [ ] 说明:何时继续用 Rabbit / Asynq,而非上 Kafka
- [ ] (可选)本机写出一条并消费到
- [ ] 简历口径:不夸大「搭过生产集群」
6. 项目驱动
| 场景 | 是否需要 Kafka |
|---|---|
| 导出 PDF、发邮件 | 否 → Asynq / Rabbit |
| 笔记变更 → ES / 数仓 / 审计多订阅 | 可考虑 |
| 百万 QPS 点击流 | Kafka 典型场;暑假不必 |
练手仓:事件名 note.created;Group es-indexer / audit-writer 两个组练「可回放多订阅」。
7. 常见坑 + AI 审查
| 坑 | 说明 |
|---|---|
| 当任务队列用完即弃 | Kafka 是日志;任务语义更贴 Rabbit/Asynq |
| 无视分区键导致乱序 | 同实体操作要同 key |
| AI 甩一套 ZooKeeper 老文 | 新版本多 KRaft;跟你镜像文档 |
| 本机堆内存打满 | 概念优先;实操可云实验场 |
| 与 Exactly-once 玄学 | 入门先 at-least-once + 幂等消费 |
8. 下一篇
会写还要会看:
→ 30 · Prometheus + Grafana
