Kafka 集群消费异常问题排查
一、问题现象
- Kafka 3 节点集群搭建完成,broker 正常上线,集群状态健康
- 业务主题创建正常、消息可正常生产发送
- 消费者无法消费消息、消费卡住、无法提交偏移量
- 内部位移主题
__consumer_offsets副本数异常,始终为 1,无法自动更新为 3
二、根本原因
1. 集群部署历史问题
- Kafka 集群最初为单节点部署,自动创建的内部位移主题
__consumer_offsets默认副本数 = 1 - 后续扩容为 3 节点集群,修改配置文件将副本相关参数调整为 3:
offsets.topic.replication.factor=3default.replication.factor=3min.insync.replicas=2
2. 核心致命问题
Kafka 内部主题
__consumer_offsets 只会自动创建一次,元数据同时存储在两个位置:- Kafka 日志目录(
/approot/kafka/logs) - Zookeeper 集群
- 仅删除 Kafka 日志目录无法清除 ZK 中的旧元数据
- 集群重启后,Kafka 读取 ZK 旧记录,认为主题已存在,不会重新创建
- 最终结果:
__consumer_offsets副本数保持 1,与配置的min.insync.replicas=2冲突 - 消费者无法提交偏移量 → 消费完全异常
三、问题修复
配置确认
- 3 台 Kafka 配置文件已正确修改:
offsets.topic.replication.factor=3transaction.state.log.replication.factor=3transaction.state.log.min.isr=2default.replication.factor=3min.insync.replicas=2
停止全部 3 台 Kafka 服务
./bin/kafka-server-stop.sh
清空 3 台节点的 Kafka 数据目录
cd /approot/kafka
rm -rf logs/*
进入 Zookeeper 客户端,删除旧主题元数据(最关键)
cd /approot/zookeeper/bin
./zkCli.sh -server 127.0.0.1:2181
#执行删除命令
deleteall /brokers/topics/__consumer_offsets
deleteall /config/topics/__consumer_offsets
quit
启动 Kafka 集群
./bin/kafka-server-start.sh -daemon config/server.properties
触发主题重建(任意执行一次消费)
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.53.100:9092 --topic test1 --from-beginning
验证修复结果
bin/kafka-topics.sh --describe --topic __consumer_offsets --bootstrap-server 192.168.53.100:9092

启动一个控制台生产者,向 test1 主题发送消息
./bin/kafka-console-producer.sh --broker-list 192.168.53.100:9092 --topic test1
>hello
>123123
>

启动一个控制台消费者,从 test1 主题读取消息
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.53.100:9092 --topic test1 --from-beginning
hello
123123



浙公网安备 33010602011771号