kafka broker id注册问题

一、故障现象

扩容kafka节点时报ERROR Error while creating ephemeral at /brokers/ids/3, node already exists and owner '216528439756789490' does not match current session '72239441589049132'

kafka broker id注册问题 - 图1

二、排查思路

1、什么是broker id

broker id是kafka节点的唯一标识符

每个broker都有一个唯一的id值用来区分彼此。Kafka在启动时会在zookeeper中/brokers/ids路径下创建一个与当前broker的id为名称的虚节点,Kafka的健康状态检查就依赖于此节点。当broker下线时,该虚节点会自动删除,其他broker或者客户端通过判断/brokers/ids路径下是否有此broker的id来确定该broker的健康状态。

三、排查过程

1、登录zookeeper查看broker id

zkCli.sh -server 127.0.0.1:2181

kafka broker id注册问题 - 图2

2、查看新增节点kafka broker id

broker.id参数表示broker id的值

kafka broker id注册问题 - 图3

四、故障原因

新增加kafka节点broker id和原kafka节点broker id重复导致新增加kafka节点报错

五、处理过程

修改新增加kafka节点broker id,再启动kafka

六、拓展

1、当需要新搭建一套kafka集群,并且和原kafka集群共用zookeeper时

由于kafka信息需要存储在zookeeper中,所以当重新搭建一套kafka集群并共用zookeeper时,这时候存储的信息就会冲突。

这时候可以通过修改zookeeper.connect参数,在后面加上kafka存储在zookeeper的目录,这时候kafka信息都会存储在zookeeper的/kafka目录下

kafka broker id注册问题 - 图4

2、清理kafka数据

当我们需要重新搭建kafka集群,这时候在清理kafka数据目录的同时,也需要将zookeeper中kafka的注册信息进行删除

  1. [zk: localhost:2181(CONNECTED) 0] rmr /kafka

信息进行删除

  1. [zk: localhost:2181(CONNECTED) 0] rmr /kafka