Kafka 学习笔记

Kafka 学习笔记

基于 3 台云服务器集群实战整理(7 课,文中 IP 均为示例,已脱敏)

版本:3.6.2 (华为云镜像安装)

文档目录:docs/kafka-学习笔记.md (博客发布时拷贝 docs/ 目录即可)

示例 IP 对照表

节点 公网 IP 内网 IP broker.id
Server 1 203.0.113.11 10.0.1.11 1
Server 2 203.0.113.12 10.0.1.12 2
Server 3 203.0.113.13 10.0.1.13 3

一、Kafka 是什么?

白话 :高吞吐的 分布式消息队列 / 事件流平台 ------生产者 发消息到 Topic ,消费者 按组订阅 处理。

比喻

  • Topic = 快递分拣中心里的「货架区」
  • Partition = 货架上的「格子」,并行处理靠它
  • Offset = 每个格子里的「取件序号」
  • Consumer Group = 取件小组,组内分工、组间各拿一份

与 Dubbo 对比:

Kafka Dubbo
通信模式 异步 消息 同步 RPC
调用方 发完即走,不等处理结果 等 Provider 返回
解耦 生产者不关心谁消费 必须知道接口

二、本集群环境

2.1 三台 Broker

名称 公网 IP 内网 IP broker.id
Server 1 203.0.113.11 10.0.1.11 1
Server 2 203.0.113.12 10.0.1.12 2
Server 3 203.0.113.13 10.0.1.13 3

2.2 安装与路径

项目 路径
程序 /opt/kafka
日志数据 /var/lib/kafka/logs
服务 systemctl start/stop/status kafka

2.3 Bootstrap 连接串

复制代码
10.0.1.11:9092,10.0.1.12:9092,10.0.1.13:9092

2.4 关键集群参数(本集群)

参数 含义
default.replication.factor 2 每条消息默认 2 副本
min.insync.replicas 1 至少 1 副本写入成功即可 ack
listeners / advertised.listeners 内网 9092 客户端连 advertised 地址

三、七课知识地图

课次 主题 核心要点
第 1 课 集群配置 listeners、advertised.listeners、RF=2
第 2 课 Topic / Partition / Offset 消息存在哪、序号怎么算
第 3 课 Consumer Group 组内分摊 Partition,组间独立消费
第 4 课 Leader / ISR / 容错 停一台 Broker,副本顶上
第 5 课 acks / 至少一次 / 幂等 可靠性 vs 性能
第 6 课 迷你订单系统 order-events + 多 Consumer Group
(综合) 与 Dubbo 组合 见 Dubbo 第 5 课

四、核心概念

4.1 Topic 与 Partition

  • Topic :逻辑分类(如 order-events
  • Partition :物理分片,顺序写、并行读
  • 本集群示例 Topic:
Topic 分区 副本 用途
lesson1-hello 默认 2 入门
lesson2-demo 3 2 分区实验
order-events 3 2 订单事件(Kafka 第 6 课 + Dubbo 第 5 课)

4.2 Offset

  • 每条消息在 Partition 内有 递增 Offset
  • Consumer 通过 Offset 记录 读到哪了
  • earliest(从头)或 latest(只读新消息)

4.3 Consumer Group

复制代码
Topic order-events (3 partitions)
        │
        ├── Group: notification-service  → 消费全部 3 分区
        ├── Group: inventory-service     → 独立再消费 3 分区
        └── Group: audit-service         → 再消费 3 分区
  • 同 Group 内:一个 Partition 同一时刻只给一个 Consumer
  • 不同 Group :各自维护 Offset,互不影响

4.4 Leader 与 ISR

  • 每个 Partition 有 1 个 Leader(读写入口)
  • ISR(In-Sync Replicas):与 Leader 同步的副本集合
  • Leader 挂了 → ISR 里某副本 选举为新 Leader(第 4 课停 Broker 实验)

4.5 可靠性:acks 与幂等

acks 含义 可靠性
0 不等 Broker 确认 最低
1 Leader 写入即成功 中等
all ISR 全部确认 最高(本课 Dubbo+Kafka Producer 用 all
  • At least once :可能重复,需 幂等(业务去重或 Kafka 幂等 Producer)
  • Exactly once:端到端最难,需事务或幂等 + 去重

五、常用命令

5.1 服务

bash 复制代码
systemctl status kafka
systemctl restart kafka

5.2 Topic 管理

bash 复制代码
# 列出 Topic
/opt/kafka/bin/kafka-topics.sh \
  --bootstrap-server 10.0.1.11:9092 --list

# 查看详情
/opt/kafka/bin/kafka-topics.sh \
  --bootstrap-server 10.0.1.11:9092 \
  --describe --topic order-events

# 创建 Topic(示例)
/opt/kafka/bin/kafka-topics.sh \
  --bootstrap-server 10.0.1.11:9092 \
  --create --topic my-topic \
  --partitions 3 --replication-factor 2

5.3 生产 / 消费消息

bash 复制代码
# 控制台生产者
/opt/kafka/bin/kafka-console-producer.sh \
  --bootstrap-server 10.0.1.11:9092 \
  --topic order-events

# 控制台消费者(从头读)
/opt/kafka/bin/kafka-console-consumer.sh \
  --bootstrap-server 10.0.1.11:9092 \
  --topic order-events \
  --from-beginning

# 指定 Consumer Group
/opt/kafka/bin/kafka-console-consumer.sh \
  --bootstrap-server 10.0.1.11:9092 \
  --topic order-events \
  --group my-group

5.4 查看 Consumer Group

bash 复制代码
/opt/kafka/bin/kafka-consumer-groups.sh \
  --bootstrap-server 10.0.1.11:9092 \
  --list

/opt/kafka/bin/kafka-consumer-groups.sh \
  --bootstrap-server 10.0.1.11:9092 \
  --describe --group my-group

六、第 6 课:order-events 迷你系统

场景:订单创建后发事件,多个下游独立消费。

复制代码
Producer → order-events → Group: notification(发短信)
                        → Group: inventory(扣库存)
                        → Group: audit(写日志)

消息示例(Dubbo 第 5 课写入):

复制代码
ORDER_CREATED|orderId=ORD-xxx, product=lesson5-product-1, amount=99.0, provider=10.0.1.11

七、listeners 为什么要配 advertised?

  • listeners :Broker 绑定 哪个地址/port
  • advertised.listeners :告诉客户端 应该连哪里

云服务器常见坑:Broker 绑内网,若 advertised 配成 localhost 或错 IP,外网/其他机器连不上

本集群:统一用内网 IP + 9092,三台 ECS 内网互通。


八、故障实验回顾(第 4 课)

  1. 正常:kafka-topics.sh --describe 看 Leader 分布
  2. 停一台 Broker(如 Server 3)
  3. 再 describe:部分 Partition Leader 切到其他 Broker
  4. Producer/Consumer 仍可工作(RF=2 保证有副本)
  5. 恢复 Broker,重新加入 ISR

九、与 Dubbo 组合(第 5 课)

复制代码
用户请求 → Dubbo Consumer → Dubbo Provider(同步创建订单、返回 orderId)
                                    │
                                    └── Kafka Producer → order-events
                                                              │
                                    库存 / 短信 / 审计 ← Consumer Groups
  • Dubbo:同步、要结果
  • Kafka:异步、通知下游、易扩展

十、运维要点

  1. 磁盘 :日志目录 /var/lib/kafka/logs 要监控空间
  2. RF 与 Broker 数:RF=2 至少 2 台 Broker 存活才安全
  3. 9092 一般内网访问,公网需安全组 + 正确 advertised
  4. 不要与 独立 ZK 抢 2181(本集群 ZK 与 Kafka 分离)
  5. 生产消息建议 acks=all + 合理 retries + 幂等设计

十一、一句话总结

Kafka = 分布式日志 / 消息流 :Topic 分类、Partition 并行、Consumer Group 分工;适合 异步、解耦、高吞吐 ;与 Dubbo 组合时负责 事件通知,不负责同步返回业务结果。