kafka介绍
# 一、Kafka 核心概念
- Broker
- Kafka 服务的实例,每个 Broker 都可以处理消息的读写请求。
- Broker 集群中会有一个 Controller Broker 负责管理分区领导者。
- Topic
- 消息分类,类似队列名称。
- 每个 Topic 可以被分成多个 Partition。
- Partition
- Topic 的子单元。
- 消息在 Partition 内有序,分布在不同 Broker 上。
- 每个 Partition 有一个 Leader 和多个 Follower。
- Leader 处理所有读写,Follower 异步复制。
- Producer
- 消息生产者,将消息发送到 Topic。
- 可以指定 Partition 或者让 Kafka 根据 key 计算 Partition。
- Consumer
- 消息消费者,从 Topic 拉取消息。
- Consumer Group:一组消费者共同消费 Topic,Partition 只被组内一个消费者消费。
- Offset
- Partition 中每条消息的唯一编号。
- Consumer 使用 Offset 来追踪消费进度。
- 可以手动或自动提交。
- Replication
- Partition 的副本机制。
- replication.factor 决定副本数量。
- 保证高可用,如果 Leader 挂掉,Follower 可接管。
- ZooKeeper(旧版 Kafka)
- 用于管理 Broker 集群状态和 Leader 选举。
- Kafka 2.8+ 开始可使用 KRaft 模式 无需 ZooKeeper。
# 二、Kafka 常用管理命令
假设 Kafka 安装路径为
/opt/kafka,Zookeeper 地址127.0.0.1:2181
- 查看 Topic 列表
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
1
- 查看 Topic 详细信息
bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server localhost:9092
1
输出内容包括:
- Partition 数量
- Leader
- ISR(In-Sync Replicas)
- 副本信息
- 创建 Topic
bin/kafka-topics.sh --create --topic test-topic --partitions 3 --replication-factor 2 --bootstrap-server localhost:9092
1
- 删除 Topic
bin/kafka-topics.sh --delete --topic test-topic --bootstrap-server localhost:9092
1
- 查看 Consumer Group
bin/kafka-consumer-groups.sh --list --bootstrap-server localhost:9092
1
- 查看 Consumer Group 消费状态
bin/kafka-consumer-groups.sh --describe --group test-group --bootstrap-server localhost:9092
1
输出内容包括:
- Partition 对应的消费 Offset
- Lag(未消费消息数量)
# 三、Kafka 排障操作手册
# 1. Broker 问题
症状
- Broker 无法启动或频繁重启
- 集群状态不稳定,Leader 频繁切换
排查步骤
- 查看 Broker 日志:
tail -f /opt/kafka/logs/server.log
1
- 检查端口:
netstat -tlnp | grep 9092
1
- 检查磁盘空间:
df -h
1
- 检查 ZooKeeper / KRaft 状态:
bin/zookeeper-shell.sh 127.0.0.1:2181 ls /brokers/ids
1
- 如果 Leader 频繁切换,检查 ISR 是否健康:
bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server localhost:9092
1
# 2. Topic 和 Partition 问题
症状
- 消费滞后(Lag 增大)
- 生产消息缓慢
排查步骤
- 检查 Topic Partition 是否均匀分布:
bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server localhost:9092
1
- 检查生产端是否报错:
grep ERROR /opt/kafka/logs/server.log
1
- 检查消费者 lag:
bin/kafka-consumer-groups.sh --describe --group test-group --bootstrap-server localhost:9092
1
- 检查磁盘 I/O:
iostat -x 1
1
- 调整生产端 batch.size 或压缩参数。
# 3. Consumer 问题
症状
- 消费端无法消费
- 消费滞后
排查步骤
- 检查消费组状态:
bin/kafka-consumer-groups.sh --describe --group test-group --bootstrap-server localhost:9092
1
- 检查网络:
ping broker_ip
1
- 检查 Offset 提交方式(自动提交可能失败)
- 查看消费者日志
# 4. 网络和性能问题
症状
- 生产或消费延迟高
- Kafka 集群负载高
排查步骤
- 查看 Broker CPU、内存、磁盘 I/O:
top
iostat -x 1
1
2
2
- 检查网络带宽:
ifstat 1
1
- 查看 Kafka 内部指标(JMX 或 Prometheus)
- 调整配置:
num.network.threadsnum.io.threadssocket.receive.buffer.bytessocket.send.buffer.bytesreplica.fetch.max.bytes
# 5. 常用快速修复
| 问题 | 快速修复措施 |
|---|---|
| Broker 磁盘满 | 清理旧日志,调整 log.retention.ms |
| ISR 过少 | 检查副本是否 offline,重启 Follower |
| 消费延迟 | 增加消费者实例,检查消费逻辑 |
| 消息堆积 | 检查生产端速率和 Partition 分布 |
| Leader 频繁切换 | 检查网络、磁盘和配置,确保 ISR 健康 |
上次更新: 2026/04/29, 17:14:21
|