【问题标题】:Kafka: org.apache.zookeeper.KeeperException$NoNodeException while creating topic on multi server setupKafka:在多服务器设置上创建主题时出现 org.apache.zookeeper.KeeperException$NoNodeException
【发布时间】:2016-06-15 04:36:22
【问题描述】:

我正在尝试设置多节点 Kafka-0.8.2.2 集群,其中 1 个生产者、1 个消费者和 3 个代理都在不同的机器上。

producer 上创建主题时,我收到org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids 的错误。完整的控制台输出可用 hereKafka Producer的日志没有错误。

我用来运行Kafka的命令是:

./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic edwintest

注意:Zookeeper 服务在所有服务器上运行,并且所有三个代理都在运行 Kafka 服务器(只有代理需要 Kafka 服务器。对吗?)。

我的 producer.properties 的配置如下:

metadata.broker.list=<IP.OF.BROKER.1>:9092,<IP.OF.BROKER.2>:9092,<IP.OF.BROKER.3>:9092

producer.type=sync

compression.codec=none

serializer.class=kafka.serializer.DefaultEncoder

以下是我用作参考的许多文章中的一些:

【问题讨论】:

    标签: apache-kafka kafka-producer-api kafka-python


    【解决方案1】:

    乍一看,您似乎正在向本地动物园管理员调用创建主题,而该管理员不知道您的任何卡夫卡经纪人。你应该打电话给./bin/kafka-topics.sh --create --zookeeper &lt;IP.OF.BROKER.1&gt;:2181

    【讨论】:

    • 我还需要进一步澄清。 Kafka 服务器应该只在代理上运行? server.properties 中的 broker.id=x 参数也只需要为经纪人设置吗?
    • @MoinuddinQuadri 在 Kafka 术语中,Kafka 服务器被称为代理。在 Kafka 集群中,您将只有代理,它们由 broker.id 标识,它应该是不同的正整数。生产者和消费者不被视为服务器,它们只是客户端。
    • 抱歉,我不确定我是否收到了问题。实际上,卡夫卡服务是经纪人。 (默认)设置如下所示。你是一组 kafka-servers (a.k.a.) 经纪人。除了代理之外,您还有奇数个 Zookeeper 服务器,用于协调服务器。此外,您的客户端是生产者(将消息写入服务器/代理)和从服务器读取消息的消费者。
    • 感谢您的回答。它消除了我的一个巨大疑问。我需要再澄清一下。生产者和消费者机器上不需要zookeeper
    • 你是对的。客户端机器上不需要 Zookeeper。只是为了明确 zookeeper 的用途:一方面 zookeeper 用于协调集群 - 每个 Kafka Broker 都需要知道集群中的其他 Broker 是什么,哪个 broker 负责哪个主题的哪个部分等。此外,zookeeper服务器用于处理您的消费者组的偏移量(至少在 0.9.x 上的 0.8.x 版本发生了变化,但我不能肯定地告诉您)希望对您有所帮助
    【解决方案2】:

    问题是因为我试图连接到本地主机的zookeeper。我的理解是 Zookeeper 需要在生产者、消费者和 Kafka 代理上运行,并且生产者 -> 代理和代理 -> 消费者之间通过 Zookeeper 进行通信。但这是不正确的。其实:

    ZookeeperKafka 服务器应仅在代理服务器上运行。在创建主题或将内容发布到主题时,应使用 --zookeeper 选项传递任何 Kafka 代理的公共 DNS。无需在生产者或消费者实例上运行 Kafka 服务器。

    正确的命令是:

    ./bin/kafka-topics.sh --create --zookeeper <Public-DNS>:<PORT> --replication-factor 1 --partitions 3 --topic edwintest
    

    其中:Public-DNS 是任何 Kafka 代理的 DNS,PORT 是 zookeeper 服务的端口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2015-03-22
      • 2017-07-21
      • 1970-01-01
      相关资源
      最近更新 更多