我用kafka broker和zookeeper创建了docker,用run脚本启动它。如果我重新启动,它会正常启动并正常运行(windows->wsl->two-tmux windows,one session)。如果我关闭Kafka或zookeeper并再次启动它,它将正常连接。
当我停止docker容器时出现问题(docker停止我的\u kafka \u容器)。然后我从我的脚本开始。在开始之前的脚本中,我删除了旧容器 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)
如何避免代理更改它的集群id?
14条答案
按热度按时间ahy6op9u1#
如果您100%确定连接到了正确的zookeeper和正确的kafka日志目录,但由于某些原因,内容不匹配,并且在尝试恢复时不想丢失所有数据:
kafka数据目录(请检查config/server.properties以了解
log.dirs
属性,默认为/tmp/kafka-logs
)包含一个名为meta.properties
. 它包含集群id,它应该与注册到zk的id相匹配。编辑文件以匹配zk,编辑zk以匹配文件,或者删除文件(它包含集群id和代理id,第一个当前已损坏,第二个通常在配置文件中)。在这个小手术之后,Kafka将从你现有的所有数据开始,因为你没有删除任何数据文件。这样地:
mv /tmp/kafka-logs/meta.properties /tmp/kafka-logs/meta.properties_old
wa7juj8i2#
我尝试了大部分的答案,找到了真正有效的方法(丢失所有的数据和记录)。
仅适用于windows操作系统
因此,正如其他人所建议的,我们确实需要更改和设置这两个数据库的数据目录的默认路径
server.properties中的kafka和
zookeeper.properties中的zookeeper
//记住这是很重要的,如果你是在窗口给双斜杠。
为了Kafka
log.dirs=c://kafka\u 2.13-2.5//data//kafka
Zookeeper也是如此
datadir=c://kafka\u 2.13-2.5//data//zookeeper
显然,您需要先创建上面列出的文件夹,然后再进行设置
然后试着运行zookeeper和Kafka没有面对的问题,因为改变了路径。
在此之前,我有一个单一的“/”只工作了一次,然后改为“\”再次这也工作,但只有一次。
编辑和不编辑,以便正确终止进程
kafka-server-stop.bat和
zookeeper-server-stop.bat
y3bcpkx13#
我在使用docker时也遇到了同样的问题。此问题自kafka 2.4以来发生,因为添加了检查以查看zookeeper中的群集id是否匹配。它将集群id存储在meta.properties中。
这可以通过使zookeeper数据持久化而不仅仅是zookeeper日志来解决。e、 g.具有以下配置:
您还应该删除kafka日志中的meta.properties文件一次,以便kafka从zookeeper检索正确的集群id。在那之后,ID应该匹配,你不必再这样做了。
您还可能遇到snapshot.trust.empty错误,该错误也是在2.4中添加的。您可以通过添加snapshot.trust.empty=true设置或在升级到2.4之前使zookeeper数据持久化来解决此问题。
hc8w905p4#
请尝试以下操作。。。
在./config/server.properties中启用以下行
侦听器=纯文本://:9092
修改默认zookeeper数据目录
修改默认Kafka日志目录
cmssoen25#
对于windows,重命名或删除此
meta.properties
帮助启动Kafka和观察文件已创建一次启动。tjjdgumg6#
我就是这样解决的。我搜索了这个文件,重命名了它,并成功地启动了它,一个新的文件被创建。
我是mac下brew安装的kafka
希望这对你有帮助。
r6l8ljro7#
试试这个:
打开服务器server.properties文件,该文件位于您的kafka文件夹kafka\u 2.11-2.4.0\config中
搜索条目log.dirs
如果您指定了目录c:。。。。。。。将其更改为相对于当前目录。示例log.dirs=../../logs
这对我有用:)
qlfbtfca8#
要解决此问题:
只需将创建(或生成)的所有日志/数据文件删除到zookeeper和kafka中。
运行zookeper
跑Kafka
这对我有用,但我无法解释为什么。。。试试看,告诉我。
希望这项工作为你=)
jdg4fx2g9#
Kafka过去是用其他/其他zookeeper示例启动的,因此在其中注册了旧的zookeeper id。在kafka config目录中,打开kafka config properties文件,让server.properties使用参数log.dirs=找到日志路径目录,然后转到日志路径目录并在其中找到文件meta.properties。打开文件meta.properties并更新cluster.id=或从日志路径目录中删除此文件或所有日志文件,然后重新启动kafka。
bvn4nwqk10#
meta.properties中有一个cluster.id属性,只需用错误日志中声明的替换id即可。
meta.properties文件位于kafka.logdir中。您可以从kafka config server.properties学习kafka.logdir。下面是一个例子。
一旦你找到meta.properties文件,就改变它。换了以后应该是这样的。
dgenwo3n11#
编辑
meta.properties
并用cluster.id
重启Kafka。在linux服务器上,它位于
/var/lib/kafka/meta.properties
对所有服务器执行此操作。zookeeper将为代理提供新的群集id。3pvhb19x12#
这是因为Kafka2.4.0版本中引入了一个新特性,它是
[KAFKA-7335] - Store clusterId locally to ensure broker joins the right cluster
. 当docker重新启动时,kafka尝试匹配本地存储的clusterId
去Zookeeper那里clusterId
(由于docker重新启动而更改)由于此不匹配,将抛出上述错误。有关更多信息,请参阅此链接。euoag5mw13#
我在windows机器上运行kafka服务器时遇到了同样的问题。
您可以尝试以下方法来解决此问题:
打开位于kafka文件夹kafka\u 2.11-2.4.0\config中的server server.properties文件(考虑到kafka的版本,文件夹名称可以是kafka\u)
搜索条目log.dirs
如果log.dir路径包含如下windows目录路径e:\shyam\software\kafka\u 2.11-2.4.0\kafka logs,其中有一个反斜杠,即\,请将其更改为双反斜杠,即
希望有帮助。干杯
tyu7yeag14#
如果在测试过程中,您正试图启动一个embeddedkafka代理,并且如果您的测试用例没有清理temp目录,那么您将不得不手动删除kafka日志目录以克服此错误。