卡夫卡经纪人不';在docker重新启动后,找不到群集id并创建新的群集id
我已经用kafka broker和zookeeper创建了docker,用run脚本启动它。 如果我重新启动,它会正常启动并正常运行(Windows->WSL->两个tmux窗口,一个会话)。如果我关闭卡夫卡或zookeeper并再次启动它,它将正常连接 当我停止docker容器(docker停止我的卡夫卡容器)时出现问题。然后我从脚本开始。/run\u docker。在开始之前的脚本中,我删除旧容器卡夫卡经纪人不';在docker重新启动后,找不到群集id并创建新的群集id,docker,apache-kafka,apache-zookeeper,Docker,Apache Kafka,Apache Zookeeper,我已经用kafka broker和zookeeper创建了docker,用run脚本启动它。 如果我重新启动,它会正常启动并正常运行(Windows->WSL->两个tmux窗口,一个会话)。如果我关闭卡夫卡或zookeeper并再次启动它,它将正常连接 当我停止docker容器(docker停止我的卡夫卡容器)时出现问题。然后我从脚本开始。/run\u docker。在开始之前的脚本中,我删除旧容器docker rm my_kafka_container,然后运行docker Zookeepe
docker rm my_kafka_container
,然后运行docker
Zookeeper正常启动,在文件meta.properties中,它具有以前启动时的旧群集id,但由于某些原因,kafka broker无法通过znode cluster/id找到此id,并创建一个新的id,而不是存储在meta.properties中的id。我得到
ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.common.InconsistentClusterIdException: The Cluster ID m1Ze6AjGRwqarkcxJscgyQ doesn't match stored clusterId Some(1TGYcbFuRXa4Lqojs4B9Hw) 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:220)
at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:44)
at kafka.Kafka$.main(Kafka.scala:84)
at kafka.Kafka.main(Kafka.scala)
[2020-01-04 15:58:43,303] INFO shutting down (kafka.server.KafkaServer)
如何避免代理更改it群集id?要解决此问题:
希望这项工作对您有帮助。=)尝试以下…
如果您100%确定连接到了正确的ZooKeeper和正确的Kafka日志目录,但由于某些原因,情况不匹配,并且您不想在尝试恢复时丢失所有数据: Kafka数据目录(检查config/server.properties中的
log.dirs
属性,默认为/tmp/Kafka logs
)包含一个名为meta.properties
的文件。它包含集群ID。该ID应与注册到ZK的ID相匹配。要么编辑文件以匹配ZK,要么编辑ZK以匹配文件,要么删除文件(它包含集群id和代理id,第一个当前已损坏,第二个通常位于配置文件中)。在这次小手术之后,卡夫卡将从您现有的所有数据开始,因为您没有删除任何数据文件
像这样:
mv/tmp/kafka logs/meta.properties/tmp/kafka logs/meta.properties\u old
对于windows,重命名或删除此meta.properties
有助于启动kafka,启动后已创建观察到的文件
{kafka-installation-folder}\softwareskafkalogs\meta.properties
我在Windows计算机上运行Kafka服务器时遇到了相同的问题 您可以尝试以下方法来解决此问题:
- 打开位于kafka文件夹kafka_2.11-2.4.0\config中的server.properties文件
- 搜索条目log.dirs
- 如果您指定了目录C:。。。。。。。将其更改为相对于当前目录。示例log.dirs=../../logs
这对我来说很有效:)卡夫卡过去是通过zookeeper的其他实例启动的,因此旧的zookeeper id在其中注册。 在Kafka配置目录中,打开Kafka配置属性文件,例如server.properties 使用参数log.dirs=查找日志路径目录,然后转到日志路径目录并在其中查找文件meta.properties。
打开文件meta.properties并更新cluster.id=或从日志路径目录中删除此文件或所有日志文件,然后重新启动kafka。我在使用Docker时遇到了相同的问题。此问题自Kafka 2.4以来发生,因为添加了一个检查,以查看Zookeeper中的集群ID是否匹配。它将集群id存储在meta.properties中 这可以通过使Zookeeper数据持久化而不仅仅是Zookeeper日志来解决。例如,使用以下配置:
volumes:
- ~/kafka/data/zookeeper_data:/var/lib/zookeeper/data
- ~/kafka/data/zookeeper_log:/var/lib/zookeeper/log
您还应该删除Kafka日志中的meta.properties文件一次,以便Kafka从Zookeeper检索正确的集群id。在那之后,ID应该匹配,你不必再这样做了
您还可能遇到snapshot.trust.empty错误,该错误也是在2.4中添加的。您可以通过添加snapshot.trust.empty=true设置或在升级到2.4之前使Zookeeper数据持久化来解决此问题。这是由于Kafka 2.4.0版本中引入了一项新功能,因此
[KAFKA-7335]-在本地存储clusterId,以确保代理加入正确的集群
。当docker重新启动时,Kafka尝试将本地存储的clusterId
与Zookeeper的clusterId
(由于docker重新启动而更改)匹配。由于这种不匹配,将引发上述错误。请参阅
了解更多信息。
我就是这样解决的。我搜索了这个文件,重命名了它,并成功地启动了它,创建了一个新文件
我是由brew在mac下安装的Kafka
希望这对您有所帮助。在元属性中有一个cluster.id属性只需用错误日志中声明的id替换即可。
meta.properties文件位于kafka.logdir中。您可以从kafka config server.properties学习kafka.logdir。下面是一个例子
cat /opt/kafka/config/server.properties | grep log.dirs
Expected output:
log.dirs=/data/kafka-logs
一旦找到meta.properties文件,请更改它。改变之后,它应该是这样的
#
#Tue Apr 14 12:06:31 EET 2020
cluster.id=m1Ze6AjGRwqarkcxJscgyQ
version=0
broker.id=0
我尝试了大部分答案,找到了真正有效的方法(丢失所有数据和记录)。
仅适用于WINDOWS操作系统
因此,正如其他人所建议的,我们确实需要更改并设置这两者的数据目录的默认路径 server.properties中的Kafka和