【问题标题】:error while starting kafka broker启动 kafka 代理时出错
【发布时间】:2016-09-28 23:19:34
【问题描述】:

我昨天能够成功设置 zookeeper 和一个 kafka 代理。一切都按预期工作。我关闭了 kafka (ctrl + c),然后关闭了 zookeeper。

今天我启动了zookeeper,当我启动kafka(bin/kafka-server-start.sh config/server0.properties)时,出现以下错误。我尝试了各种建议的补救措施(完全删除我的 kafka 安装并从头开始重新安装)。我仍然得到同样的错误。

[2016-09-28 16:15:55,895] FATAL Fatal error during KafkaServerStartable startup. Prepare to shutdown (kafka.server.KafkaServerStartable)
java.lang.RuntimeException: A broker is already registered on the path /brokers/ids/0. This probably indicates that you either have configured a brokerid that is already in use, or else you have shutdown this broker and restarted it faster than the zookeeper timeout so it appears to be re-registering.
        at kafka.utils.ZkUtils.registerBrokerInZk(ZkUtils.scala:305)
        at kafka.utils.ZkUtils.registerBrokerInZk(ZkUtils.scala:291)
        at kafka.server.KafkaHealthcheck.register(KafkaHealthcheck.scala:70)
        at kafka.server.KafkaHealthcheck.startup(KafkaHealthcheck.scala:51)
        at kafka.server.KafkaServer.startup(KafkaServer.scala:244)
        at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:37)
        at kafka.Kafka$.main(Kafka.scala:67)
        at kafka.Kafka.main(Kafka.scala)
[2016-09-28 16:15:55,896] INFO [Kafka Server 0], shutting down (kafka.server.KafkaServer)

全部在mac中设置

【问题讨论】:

    标签: apache-kafka apache-zookeeper


    【解决方案1】:

    我在设置 kafka 和 zookeeper 多节点集群时遇到了同样的问题。

    根本原因:

    由于 zookeeper ensemble 需要一些时间来设置,所以当我们启动 kafka brokers 时,所有 zookeeper 节点可能还没有加入 zookeeper ensemble。

    因此,可能是一个 kafka 节点连接到一个尚未在集合中的 zookeeper 节点。

    另一个原因可能是 kafka 代理被杀死而不是停止。 当你杀死你的 kafka 进程或者它崩溃并且它没有正确关闭它的 zookeeper 连接时。

    解决方案:

    为避免这种情况,请确保在启动 kafka 代理之前您的 zookeeper ensemble 已启动并运行。

    在 zookeeper 和 kafka 代理服务启动和停止之间添加适当的等待。

    【讨论】:

    • 但是一旦出现问题,您如何解决?
    • 您可以在zookeeper中删除日志中列出的节点。我很惊讶该节点不是在断开连接时清理的临时节点。
    • 转到 zookeeper.properties 并找到 zookeeper 数据目录。删除zookeeper中数据目录的内容。重启zookeeper和kafka。它会工作
    • 我在windows环境中,我认为有一点,你说:另一个原因......经纪人被杀;有一个阻止kafka和阻止zookeeper的蝙蝠,我没有使用它们 - 所以我陷入了这个问题。现在我知道每次我停止进程 - 不杀死它们(或关闭它们正在运行的 cmd) - 我都在做正确的事情!感谢您的提示@Shubham! (因为我在测试,我开始和停止它!)
    【解决方案2】:

    我在我的 AWS 服务器中发现了类似的问题。问题是动物园管理员正在运行。所以我先终止了这个过程,然后再试一次,它成功了。

    $ ps aux | grep zookeeper
    $kill -9 <zookeeper.properties process>
    

    【讨论】:

    • 对我来说,这发生在我的本地机器上。我在启动时运行了一组 docker 命令。其中之一,我没有意识到,是动物园管理员。一旦我杀死了 docker 进程,我就可以启动我自己的 zookeeper,然后 kafka 服务器就可以工作了。
    【解决方案3】:

    @ShubhWIP 的答案是正确的,但缺少重要信息。

    在 zookeeper 和 kafka 代理服务启动和停止之间添加适当的等待。

    在 zookeeper 和 kafka 之间引入 20 秒的延迟。 zookeeper 的会话过期时间为 18000 毫秒。它需要这个时间来宣布旧会话死亡。如果在此之前启动了 Kafka 代理,代理将关闭并显示“Error while creating ephemeral at /broker/ids/id, node already exists”。 p>

    【讨论】:

    • 在 docker-compose 上可以做类似entrypoint: sh -c 'sleep 30 &amp;&amp; /etc/confluent/docker/run'
    【解决方案4】:

    我遇到了同样的问题,有两种解决方法

    1. 【推荐】需要清理zookeeper路径/brokers/ids/[]中的broker id。使用 zk-cli tool delete 命令清理路径。启动您的代理并验证它是否已向协调器注册。
    2. 解决此问题的另一种方法是从 kafka 服务器配置更改您的代理 ID 并重新启动代理。但是,这会损坏您的分区并且不建议使用数据

    【讨论】:

    • 为我工作,并且可能比有些粗暴地删除 zk 和 kafka 临时目录更好的解决方案。非常感谢,我想补充一下,对于那些不熟悉的人,您也可以在独立的 kafka 中使用./bin/zookeeper-shell.sh 来完成这项工作(例如./kafka/kafka_2.13-2.8.0/bin/zookeeper-shell.sh 0.0.0.0:2181)。使用ls /brokers/ids 检查brokerid,然后使用例如删除它deleteall /brokers/ids/0.
    【解决方案5】:

    /tmp 目录下的以下目录已被删除:

    • kafka-log目录
    • Zookeeper-log目录

    然后,我重新启动了kafka 服务。

    有效!!

    【讨论】:

    • 这可能是一条评论
    • 错误答案。你破坏了宝贵的数据。您是否因为无法打开文件而格式化硬盘?
    【解决方案6】:

    以下方法对我有用。

    config/server-1.properties 中的代理 ID 更改为不同的值。默认为0。将其更改为 1 并再次测试。

    【讨论】:

      【解决方案7】:

      我在包含 zookeeper 和 kafka 的 docker 容器中遇到了类似的问题(将两个服务放在一个容器中并不是最佳做法,但这是出于测试目的)。

      这是错误

      [2018-11-21 12:54:24,434] INFO [ThrottledChannelReaper-Fetch]: Starting (kafka.server.ClientQuotaManager$ThrottledChannelReaper)
      [2018-11-21 12:54:24,434] INFO [ThrottledChannelReaper-Produce]: Starting (kafka.server.ClientQuotaManager$ThrottledChannelReaper)
      [2018-11-21 12:54:24,435] INFO [ThrottledChannelReaper-Request]: Starting (kafka.server.ClientQuotaManager$ThrottledChannelReaper)
      [2018-11-21 12:54:24,453] INFO Loading logs. (kafka.log.LogManager)
      [2018-11-21 12:54:24,457] INFO Logs loading complete in 4 ms. (kafka.log.LogManager)
      [2018-11-21 12:54:24,468] INFO Starting log cleanup with a period of 300000 ms. (kafka.log.LogManager)
      [2018-11-21 12:54:24,469] INFO Starting log flusher with a default period of 9223372036854775807 ms. (kafka.log.LogManager)
      [2018-11-21 12:54:24,694] INFO Awaiting socket connections on 0.0.0.0:9092. (kafka.network.Acceptor)
      [2018-11-21 12:54:24,728] INFO [SocketServer brokerId=0] Started 1 acceptor threads (kafka.network.SocketServer)
      [2018-11-21 12:54:24,741] INFO [ExpirationReaper-0-Produce]: Starting (kafka.server.DelayedOperationPurgatory$ExpiredOperationReaper)
      [2018-11-21 12:54:24,741] INFO [ExpirationReaper-0-DeleteRecords]: Starting (kafka.server.DelayedOperationPurgatory$ExpiredOperationReaper)
      [2018-11-21 12:54:24,741] INFO [ExpirationReaper-0-Fetch]: Starting (kafka.server.DelayedOperationPurgatory$ExpiredOperationReaper)
      [2018-11-21 12:54:24,750] INFO [LogDirFailureHandler]: Starting (kafka.server.ReplicaManager$LogDirFailureHandler)
      [2018-11-21 12:54:24,790] INFO Creating /brokers/ids/0 (is it secure? false) (kafka.zk.KafkaZkClient)
      [2018-11-21 12:54:24,802] ERROR Error while creating ephemeral at /brokers/ids/0, node already exists and owner '72057672936325120' does not match current session '72057674644258816' (kafka.zk.KafkaZkClient$CheckedEphemeral)
      [2018-11-21 12:54:24,803] INFO Result of znode creation at /brokers/ids/0 is: NODEEXISTS (kafka.zk.KafkaZkClient)
      [2018-11-21 12:54:24,808] ERROR [KafkaServer id=0] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
      org.apache.zookeeper.KeeperException$NodeExistsException: KeeperErrorCode = NodeExists
          at org.apache.zookeeper.KeeperException.create(KeeperException.java:122)
          at kafka.zk.KafkaZkClient.checkedEphemeralCreate(KafkaZkClient.scala:1525)
          at kafka.zk.KafkaZkClient.registerBrokerInZk(KafkaZkClient.scala:84)
          at kafka.server.KafkaServer.startup(KafkaServer.scala:257)
          at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:38)
          at kafka.Kafka$.main(Kafka.scala:75)
          at kafka.Kafka.main(Kafka.scala)
      

      对我来说,Quickfix 是几秒钟后启动 kafka-server;

      bin/zookeeper-server-start.sh -daemon config/zookeeper.properties && (bin/kafka-server-start.sh config/server.properties || echo "kafka start failed. restarting ... " && sleep 3 && bin/kafka-server-start.sh config/server.properties)
      

      【讨论】:

        【解决方案8】:

        当我使用docker-compose up 运行多个容器并使用 ctrl-C 结束进程时,我遇到了这种情况。用docker-compose down 修复它。

        【讨论】:

          【解决方案9】:

          通过检查默认 prot 9092 是否已在使用来确保 kafka 服务器正确关闭。杀死9092上的进程,重启kafka server。

          如果不起作用,可能是现有的 kafka 服务器(代理 ID 为 0)已在使用中。 尝试将“server0.properties”中的broker.id 更改为1 而不是0(顺便说一句,为什么它被称为server0,您是否在这里更改了任何配置?默认情况下,它应该是server.properties),

          【讨论】:

            【解决方案10】:

            我在windows环境下也是一样!而且我只是在测试中,所以我必须每天关闭这些进程,因为它们安装在我每天放下的笔记本电脑上! @Shubham 给了我这个想法,但他没有详细说明,我觉得把它作为答案是正确的,这样其他同船的人都知道该怎么做: 重要的是不要杀死进程 - 在我的情况下,我关闭了两个进程正在运行的 windows cmd。这是错误的,之后日志将不允许正确启动 kafka 代理。 我现在知道通过运行正确的 bat(在其他命令(用于启动服务器)所在的 \bin\windows 文件夹中)来停止进程。我不会再通过关闭 cmd 来终止进程。 为了走出坑,我确实擦除了卡夫卡日志——但这不是解决方案!解决方案是避免杀死进程!

            【讨论】:

              【解决方案11】:

              我在生产环境中遇到过这种情况,无法简单地更改 Kafka 代理 ID。在对所有 Zookeeper 实例执行滚动重启后,我能够成功重启 Kafka 代理。如果您针对单个 Zookeeper 实例运行,则重新启动单个 Zookeeper 实例就足够了。

              【讨论】:

                【解决方案12】:

                我也遇到了同样的问题。你可以按照我的步骤来做:

                以三个节点的集群为例:

                对于节点h01:在文件kafka/config/server.properties中设置broker.id=0, 然后可以看到一行代码 在 这 像这样的文件:log.dirs=/tmp/kafka-logs,那是我的,你的可能是别人的。 然后进入这个目录(log.dirs) 和你 将找到一个文件meta.properties:打开并设置broker.id=0

                接下来做类似的工作:

                对于节点h02:在文件kafka/config/server.properties中设置broker.id=1, 然后可以看到一行代码 在这 像这样的文件:log.dirs=/tmp/kafka-logs,那是我的,你的可能是别人的。 然后进入这个目录(log.dirs) 你会找到一个文件meta.properties:打开并设置broker.id=1

                对于节点h03:在文件kafka/config/server.properties中设置broker.id=2, 然后可以看到一行代码 在这 像这样的文件:log.dirs=/tmp/kafka-logs,那是我的,你的可能是别人的。 然后进入这个目录(log.dirs) 你会发现一个文件meta.properties:打开并设置broker.id=2

                上次重启 kafka。

                【讨论】:

                  【解决方案13】:

                  您只需执行 zookeeper-server-stop.[sh|bat] 脚本。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-08-25
                    • 2019-03-21
                    • 2023-03-16
                    • 2017-10-02
                    • 1970-01-01
                    • 2018-09-01
                    相关资源
                    最近更新 更多