Luo Hao

kafka备忘

rehoni / 2023-10-08


1、kafka启动

运行kafka需要使用Zookeeper,所以你需要先启动Zookeeper,如果你没有Zookeeper,你可以使用kafka自带打包和配置好的Zookeeper。

# 下载解压
tar -xzf kafka_2.13-3.2.0.tgz
cd kafka_2.13-3.2.0

# 启动zookeeper
# 注意:Apache Kafka2.8版本之后可以不需要使用ZooKeeper,内测中,文章末尾有体验的安装方式。
bin/zookeeper-server-start.sh config/zookeeper.properties &

# 打开另一个命令终端启动kafka服务:
bin/kafka-server-start.sh config/server.properties &

2、使用 Zookeeper命令行修改 Kafka Cluster ID

先讲一下做这件事的背景,笔者用 Docker搭了一套 Kafka的环境用于测试,某天发现 Kafka频繁重启,查看日志中的报错如下:

ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.common.InconsistentClusterIdException: The Cluster ID q3r3fhGkTya24-s3dfvYUQ doesn't match stored clusterId Some(kguWHlzQQGmCHczV3u38vQ) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.
        at kafka.server.KafkaServer.startup(KafkaServer.scala:218)
        at kafka.Kafka$.main(Kafka.scala:109)
        at kafka.Kafka.main(Kafka.scala)

这里的报错很清晰:

Kafka meta.properties文件中记录的 Cluster ID与 ZK中的不一致

查看网上的资料,基本都讲的是修改 meta.properties文件中的 Cluster ID与 ZK一致即可,但由于笔者的 Kafka此时正在不断重启,完全无法进入容器内部,那么该如何去修改这个文件呢?

——暂时找不到方法修改 meta.properties文件

那么换个思路,是不是可以修改 ZK中记录的 Cluster ID呢?

如何找到 Kafka Cluster ID的存储位置

# 进到 ZK的安装目录后执行下面的脚本
./bin/zkCli.sh

# 使用 ls命令寻找保存 cluster id的文件
ls /kafka/cluster
# [id]

# 获取上一步找到的 id文件中的内容
get /kafka/cluster/id
# {"version":"1","id":"q3r3fhGkTya24-s3dfvYUQ"}

至此,已经成功找到了 ZK上存储 cluster id的文件

修改 Kafka Cluster ID

把日志里面 Kafka存储的 cluster id设置到 ZK里即可:

# 修改 cluster id
set /kafka/cluster/id {"version":"1","id":"kguWHlzQQGmCHczV3u38vQ"}

# 确认修改结果
get /kafka/cluster/id
# {"version":"1","id":"kguWHlzQQGmCHczV3u38vQ"}

总结

回溯 Kafka中存储的 cluster id和 ZK不一致的原因,应该是笔者重新创建 ZK容器导致的。

另外,解决问题的时候思路一定要打开,一条路走不通的时候,及时换一条路。