Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Kafka:org.apache.zookeeper.KeeperException$NoNodeException在多服务器设置上创建主题时_Apache Kafka_Kafka Producer Api_Kafka Python - Fatal编程技术网

Apache kafka Kafka:org.apache.zookeeper.KeeperException$NoNodeException在多服务器设置上创建主题时

Apache kafka Kafka:org.apache.zookeeper.KeeperException$NoNodeException在多服务器设置上创建主题时,apache-kafka,kafka-producer-api,kafka-python,Apache Kafka,Kafka Producer Api,Kafka Python,我正在尝试设置多节点Kafka-0.8.2.2集群,其中1个生产者、1个消费者和3个代理都在不同的机器上 在producer上创建主题时,我得到的错误是org.apache.zookeeper.KeeperException$NoNodeException:keeperrrorcode=NoNode for/brokers/ids。完整的控制台输出可用。卡夫卡制作人的日志中没有错误 我用来运行卡夫卡的命令是: ./bin/kafka-topics.sh --create --zookeeper

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

producer
上创建主题时,我得到的错误是
org.apache.zookeeper.KeeperException$NoNodeException:keeperrrorcode=NoNode for/brokers/ids
。完整的控制台输出可用。卡夫卡制作人的日志中没有错误

我用来运行卡夫卡的命令是:

./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic edwintest
注意:Zookeeper服务正在所有服务器上运行,并且所有三个代理上都有Kafka服务器(只有代理需要Kafka服务器。对吗?

myproducer.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
metadata.broker.list=:9092,:9092,:9092
producer.type=sync
compression.codec=none
serializer.class=kafka.serializer.DefaultEncoder
以下是我用作参考的许多文章中的一些:


乍一看,你好像是在给一个不认识你的卡夫卡布鲁克斯的当地动物园管理员打电话。您应该调用
/bin/kafka-topics.sh--create--zookeeper:2181

问题是因为我试图连接到localhost的
zookeeper
。我的理解是zookeeper需要在制作人、消费者和卡夫卡经纪人上运行,制作人->经纪人和经纪人->消费者之间通过zookeeper进行通信。但这是不正确的。实际上:

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

正确的命令将是:

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

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

我还需要进一步澄清<代码>卡夫卡服务器应仅在代理上运行?另外,
server.properties
中的
broker.id=x
参数只需要为代理设置吗?@MoinuddinQuadri在卡夫卡术语中,卡夫卡服务器称为代理。在Kafka集群中,您将只有代理,它们由broker.id标识,broker.id应该是不同的正整数。生产者和消费者不被视为服务器,他们只是客户。对不起,我不确定我是否有这个问题。实际上,卡夫卡服务的是经纪人。(默认)设置如下所示。您可以使用一组kafka服务器(也称为)代理。除了代理之外,还有奇数个zookeeper服务器,用于协调服务器。此外,您的客户端是生产者(向服务器/代理写入消息)和从服务器读取消息的消费者。感谢您的回答。这消除了我的一个巨大疑问。我还需要一份声明
zookeeper
在生产者和消费者机器上不是必需的?你说得对。客户机上不需要Zookeeper。只需澄清zookeeper的用途:一方面,zookeeper用于协调集群-每个Kafka代理需要知道集群中的其他代理,哪个代理负责哪个主题的哪个部分等。此外,zookeeper服务器用于处理消费群体的偏移量(至少在0.9.x版本的0.8.x版本之前,情况发生了变化,但我不能肯定这一点)希望能有所帮助