NoBrokersAvailable:NoBrokersAvailable-Kafka 错误

Bey*_*Gül 10 python apache-kafka kafka-consumer-api kafka-python kafka-producer-api

我已经开始学习卡夫卡了。尝试对其进行基本操作。我一直坚持关于“经纪人”的观点。

我的 kafka 正在运行,但是当我想创建一个分区时。

 from kafka import TopicPartition
(ERROR THERE) consumer = KafkaConsumer(bootstrap_servers='localhost:1234')
 consumer.assign([TopicPartition('foobar', 2)])
 msg = next(consumer)
Run Code Online (Sandbox Code Playgroud)

回溯(最近一次调用):文件“”,第 1 行,在文件“/usr/local/lib/python2.7/dist-packages/kafka/consumer/group.py”中,第 284 行,在init self._client = KafkaClient(metrics=self._metrics, **self.config) 文件 "/usr/local/lib/python2.7/dist-packages/kafka/client_async.py", line 202, in init self.config['api_version '] = self.check_version(timeout=check_timeout) 文件“/usr/local/lib/python2.7/dist-packages/kafka/client_async.py”,第 791 行,在 check_version 中引发 Errors.NoBrokersAvailable() kafka.errors。 NoBrokersAvailable:NoBrokersAvailable

小智 20

我在 kafka 流传输过程中遇到了同样的错误。下面的代码解决了我的错误:我们需要在 KafkaProducer 中定义 API 版本。

KafkaProducer(bootstrap_servers=['localhost:9092'],
              api_version=(0,11,5),
              value_serializer=lambda x: dumps(x).encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)


Mat*_*Sax 7

您不能在使用者内创建分区。创建主题时会创建分区。例如,使用命令行工具:

bin/kafka-topics.sh \
  --zookeeper localhost:2181 \
  --create --topic myNewTopic \
  --partitions 10 \
  --replication-factor 3
Run Code Online (Sandbox Code Playgroud)

这将创建一个具有 10 个分区(编号从 0 到 9)和复制因子 3 的新主题“myNewTopic”。(参见http://docs.confluent.io/3.0.0/kafka/post-deployment.html#admin-operationshttps://kafka.apache.org/documentation.html#quickstart_createtopic )

在您的消费者中,如果您调用assign(),则表示您要消费相应的分区,并且该分区必须已经存在。


som*_*rti 5

不知道这个答案是否仍然相关,但最近在无法从主机 Windows 操作系统访问的 VBox VM 代理中解决了同样的问题。由于您在 KafkaConsumer 中提到了 bootsrap_servers,我假设您至少使用 kafka 0.10.0.0

请在 server.properties 文件中查找该advertised.listeners属性并将其设置为PLAINTEXT://localhost:9092PLAINTEXT://<broker_ip>:9092

但在设置之前,请确保可以从消费者运行的环境访问您的代理(通过执行ping <broker_ip>和 netcat nc -vz <broker_ip> 9092)。

另外,您需要重新启动 kafka-server 和消费者/生产者(无论正在运行什么)并尝试发送/接收。

例如,如果您正在运行 VM,您可能希望使用仅主机适配器来使代理可从主机访问

注意:此配置适用于 Kafka Server >= 0.10.XX,但不适用于 0.8.2.X。还没有检查过 0.9.0.X


Ami*_*dav 5

我的问题是防火墙规则,因为我在Google Cloud上运行 Kafka 。

它昨天对我有用,今天我挠了 1 个小时思考为什么它不再起作用了。

由于每次连接到不同的 LAN 或 WiFi 时,本地系统的公共 IP 地址都会更改,因此我必须在防火墙规则中允许本地系统的公共 IP 地址。我建议使用具有固定公共 IP 的连接,或者在您切换/更改连接时检查这一点。

配置中的这些小的更改需要太多时间来调试和修复它们。感觉浪费了一个小时。