Kafka: org.apache.zookeeper.KeeperException$NoNodeException



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

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

我用来运行Kafka的命令是:

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

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

我的生产者属性的配置如下:

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

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

  • Zookeeper & Kafka 安装:单节点和多代理集群 - 2016
  • 逐步安装 Apache Kafka 并与 Spark 通信

乍一看,您似乎正在将创建主题称为当地动物园管理员,该动物园管理员不知道您的任何卡夫卡布鲁克。你应该打电话给./bin/kafka-topics.sh --create --zookeeper <IP.OF.BROKER.1>:2181

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

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

正确的命令将是:

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

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

最新更新