卡夫卡经纪人不';在docker重新启动后,找不到群集id并创建新的群集id

卡夫卡经纪人不';在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

我已经用kafka broker和zookeeper创建了docker,用run脚本启动它。 如果我重新启动,它会正常启动并正常运行(Windows->WSL->两个tmux窗口,一个会话)。如果我关闭卡夫卡或zookeeper并再次启动它,它将正常连接

当我停止docker容器(docker停止我的卡夫卡容器)时出现问题。然后我从脚本开始。/run\u docker。在开始之前的脚本中,我删除旧容器
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?

要解决此问题:

  • 只需将创建(或生成)的所有日志/数据文件删除到zookeeper和kafka中
  • 跑步机
  • 经营卡夫卡
  • 这对我很有效,但我无法解释为什么。。。试试看,告诉我


    希望这项工作对您有帮助。=)

    尝试以下…

  • 在./config/server.properties中启用以下行

    侦听器=纯文本://:9092

  • 修改默认ZooKeeper数据目录

  • 修改默认卡夫卡日志目录


  • 如果您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 server.properties文件(考虑到您的kafka版本,文件夹名称可以是kafka_)
  • 搜索条目log.dirs
  • 如果log.dir路径包含如下windows目录路径E:\Shyam\Software\kafka_2.11-2.4.0\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和