我正在尝试在不同的机器上设置多节点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 在生产者 -> 代理和代理 ->消费者之间完成通信。但这是不正确的。实际上:
Zookeeper 和 Kafka 服务器应该只在代理服务器上运行。在创建主题或将内容发布到主题时,任何 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 服务的端口。