Kafka 集群消费异常问题排查

一、问题现象

  1. Kafka 3 节点集群搭建完成,broker 正常上线,集群状态健康
  2. 业务主题创建正常、消息可正常生产发送
  3. 消费者无法消费消息、消费卡住、无法提交偏移量
  4. 内部位移主题 __consumer_offsets 副本数异常,始终为 1,无法自动更新为 3

image

二、根本原因

1. 集群部署历史问题

  • Kafka 集群最初为单节点部署,自动创建的内部位移主题 __consumer_offsets 默认副本数 = 1
  • 后续扩容为 3 节点集群,修改配置文件将副本相关参数调整为 3:
    • offsets.topic.replication.factor=3
    • default.replication.factor=3
    • min.insync.replicas=2
     

2. 核心致命问题

Kafka 内部主题 __consumer_offsets 只会自动创建一次,元数据同时存储在两个位置:
  1. Kafka 日志目录(/approot/kafka/logs
  2. Zookeeper 集群
  • 仅删除 Kafka 日志目录无法清除 ZK 中的旧元数据
  • 集群重启后,Kafka 读取 ZK 旧记录,认为主题已存在,不会重新创建
  • 最终结果:__consumer_offsets 副本数保持 1,与配置的 min.insync.replicas=2 冲突
  • 消费者无法提交偏移量 → 消费完全异常

三、问题修复

配置确认

  • 3 台 Kafka 配置文件已正确修改:
    • offsets.topic.replication.factor=3
    • transaction.state.log.replication.factor=3
    • transaction.state.log.min.isr=2
    • default.replication.factor=3
    • min.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

image

启动一个控制台生产者,向 test1 主题发送消息

./bin/kafka-console-producer.sh --broker-list 192.168.53.100:9092 --topic test1
>hello
>123123
>

image

启动一个控制台消费者,从 test1 主题读取消息

./bin/kafka-console-consumer.sh --bootstrap-server 192.168.53.100:9092 --topic test1 --from-beginning
hello
123123

image

 

posted @ 2026-04-28 19:42  太阳的阳ฅ  阅读(67)  评论(0)    收藏  举报