在测试 kafka 集群时,关闭 kafka 后,再次启动 kafka 集群时,遇到此问题,具体内容如下:
FATAL [KafkaServer id=0] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
java.lang.RuntimeException: A broker is already registered on the path /brokers/ids/0
局部异常内容截图如下:
关于这个异常,其实很简单,因为 broker id 为全局唯一的,异常信息很明显的告诉我们 id 为 0 的代理已经被注册了,可以到自己的 /brokers/ids/ 下去看看,全部的 broker id 都存储在这儿;
输入命令 “ ls /brokers/ids ” 进行查看,如下图:
关于这个问题的解决办法,我摸索出了三种,如下:
第一种:server.properties 入手
修改系统配置文件的 broker.id ,如 1、2、3 已经注册过了,就修改为 4、5、6,如果你从头到尾都是按照我的教程来的,那么就请修改 server_001.properties ,输入命令“ vi server_001.properties ” 修改完成后,保存即可正常启动了;
如下图:
第二种:meta.properties 入手
如果按照我的教程来的,请到 “ ” 中找到 meta.properties 配置文件,输入命令 “ vi meta.properties ” 修改 broker.id 为全局唯一,如下图:
注:如果不是这个路径,请到配置文件 log.dir 所对应的目录下,即可找到 meta.properties 配置文件。
第三种:直接删除已经注册的 broker id
当 broker 启动后,会在zk新建一个znode,访问 zk 很简单,如果按照我的教程步骤来的,
输入命令 “ bin/zkCli.sh -server 192.168.78.141:2002 ” 链接到 zk 集群, 并执行 ls /brokers/ids 就可以看到zk中存的所有的broker id 了,如下图:
删除broker id,在新版本中输入命令 “ deleteall /broker/ids ” 进行删除,在旧版本中输入命令 “ rmr /brokers/ids ” 进行删除。
好了,关于 kafka 集群启动失败 就解决了,如果还有什么疑问或遇到什么问题,可以给我留言。
歇后语:“共同学习,共同进步”,也希望大家多多关注CSND的IT社区。