【Kafka】 kafka集群升级导致broker.id发生变动变动引起的问题

402 篇文章 639 订阅 ¥99.90 ¥299.90
在Kafka集群升级过程中,由于broker.id的变动导致topic的partition丢失leader,造成服务异常。问题源于自动生成broker.id时的版本冲突。解决方案包括手动删除错误的broker.id topic并重启集群,确保Kafka controller能正确识别broker。
摘要由CSDN通过智能技术生成


在这里插入图片描述

1.概述

转载:http://791202.com/2020/02/01/bigdata/362/

2.详情

最近遇到一个问题,由于kafka集群升级导致每个broker.id出现了变动,但是topic的partition所在broker的信息依旧是原broker.id,这就造成了所有partition都丢失leader。

发现问题

通过kafka的命令发现topic的partition都没有leader,然后看了下集群监控和日志都没有明显的异常,但是日常显示的broker.id和通过kafka命令显示的有出入,进一步去zookeeper上查看了所有broker.id情况,发现是broker.id变了导致kafka controller无法通过partition依赖的broker.id找到对应的broker。

先说明一下自动生成broker.id的由来,kafka开启了broker.id.generation.enable,也就是自动生成broker.id功能,kafka在早期版本需要人为给每个broker分配一个broker.id,在server.properties配置里申明,从0.9.0版本开始,kafka支持并默认了自动生成broker.id功能。那么kafka是如何自动生成broker.id的呢?有一点是必须的,broker.id在这个kafka集群必须是全局唯一的,分布式下的全局唯一,那就联想到分布式锁了。kafka通过在zookeeper里写空字符串,触发该znode的版本自增,然后把获取的版本号和另一个配置reserved.broker.max.id相加,就得到了该broker节点的broker.id。

kafka查看topic所有partition依赖的broker,leader以及isr

kafka-topic.sh --describe --topic $topic --zookeeper $zkhost:port

zk查看当前kafka集群自增的broker序号

get /brokers/seqid

zk查看当前kafka集群所有的broker.id

ls /brokers/ids

zk查看topic所有partition的broker.id

get /brokers/topics/$topic

解决问题

手动删除错误broker.id的topic,删除完成后重启kafka集群

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值