原本想着了解一下kafka是如何进行在客户端进行编写的,想着总不能进行理论,不进行实战操作。没想到上手就出现各种各样的问题。问题是一开始,启动了kafka,输入jps,也显示成功启动了。没想到后面自己又关闭了。一开始我还以为是客户端启动,我虚拟机的内存不够用。但是一个朋友告诉我,遇到问题不能主观臆断,需要定位错误。确实这一点我做的不够好。有时候总是先入为主,没有考虑是不是其他情况。我一开始想着是不是内存爆了,于是上网搜和我出现一样情况的人,结果还真搜出一堆关于内存问题导致kafka服务器集群失败。后面我就不想解决了,心里想着既然是内存的问题,那我操作也没用,改内存吧。这完全是思维上的懒惰。
话不多说。复盘下当时的情况。
当时启动了kafka,启动java客户端之后,jps再次查看发现kafka没了。再后来发现他是过一会就消失不见了。后面查看日志报错如下:
ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.common.InconsistentClusterIdException: The Cluster ID rfuaibyfSxigyAA_51OiKA doesn't match stored clusterHKoNGU0MRjS5bQgE92PPgA) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeepet may be wrong.
at kafka.server.KafkaServer.startup(KafkaServer.scala:242)
at kafka.Kafka$.main(Kafka.scala:113)
at kafka.Kafka.main(Kafka.scala)
解决方案:
这个错误其实是没有配置好,再配置集群的时候。server.properties文件没有配置好导致的。1.Zookeeper 配置错误:
文章中提到,Zookeeper 的 dataDir 配置设置不正确,导致 Zookeeper 无法正常启动。
应该将 dataDir 设置为一个持久化的目录,而不是使用临时目录。
2.Kafka 配置错误:
Kafka 的 log.dirs 参数也需要指定一个持久化的目录,而不是使用默认的临时目录。
否则在 Kafka 服务重启时,会出现 InconsistentClusterIdException 错误。
以下参考这位博主:阅读网址https://gautambangalore.medium.com/resolved-error-fatal-error-during-kafkaserver-startup-37f638c2c00c
翻译如下:
上述错误非常常见,当我们更新现有集群中每个 Kafka Broker 上的server.properties文件以添加额外的 zookeeper 服务器条目时可能会遇到该错误,因为集群中增加了新的 Kafka Broker。如果在 Zookeeper 的 zoo.cfg 或 Kafka 服务器上执行任何配置更改,系统重启后单节点 Kafka Broker 也可能会遇到此问题。properties 文件替换/更新/tmp 目录位置。
问题的根本原因是 zookeeper 数据存储在临时文件夹中,而 Kafka 日志存储在持久文件夹中,反之亦然。理想情况下,zookeeper 用于存储快照的 zoo.cfg 中dataDir 的默认值为/tmp/zookeeper ,同样,Kafka broker 的server.properties中log.dirs的默认值为/tmp/kafka-logs。系统重启后,由于 Kafka 集群的全新注册,存储在该临时目录中的文件将被清理,并生成一个新的集群 ID。最终,这种配置不匹配或集群 ID 编号变化会导致上述错误。
有两种方法可以快速解决上述错误,但不建议在生产环境中使用。
选项 1:更新文件 meta.properties 中的 Cluster ID
如果server.properties中log.dir键的值未更新为持久文件夹位置,则meta.properties文件可能位于/tmp/kafka-logs。打开 meta.properties,内容将类似于如下所示。将 cluster.id 值替换为错误日志中存在的新集群 ID,然后重新启动 Kafka 服务器。
选项 2:- 删除保存了上次/失败会话的错误 cluster.id 的 /tmp/kafka-logs/meta.properties。
我的理解是,是重新关机之后,重启服务器,系统会删除临时文件,你配置的时候没有更改配置文件的输出目录,导致一个被删除了,一个没有删除。所以会产生问题。
我的操作如下(已经解决):
首先要检查下zookeeper有没有启动,成功启动的话先关闭。
第一步:进入config文件夹,修改zookeeper.propertie配置文件
修改server.properties文件
第二步: 重新启动zookeeper
cd ../
cd bin
./zookeeper-server-start.s -daemon ../config/zookeeper.properties
再输入jps,或者netstat -tulnp | g命令,看看有没有成功启动。
第三步:进入data文件夹,再进入对应的kafka-logs文件进行删除meta.properties文件就可以。
第四步:
接下来启动kafka服务器,都是在bin目录下执行的。
./kafka-server-start.sh -daemon ../config/server.properties
此时输入 jps看看有没有启动成功