NoBrokersAvailable:NoBrokersAvailable-卡夫卡错误
NoBrokersAvailable: NoBrokersAvailable-Kafka Error
我已经开始学习Kafka了。尝试对其进行基本操作。我一直坚持关于 'Brokers' 的观点。
我的kafka是运行但是当我想创建一个分区时。
from kafka import TopicPartition
(ERROR THERE) consumer = KafkaConsumer(bootstrap_servers='localhost:1234')
consumer.assign([TopicPartition('foobar', 2)])
msg = next(consumer)
traceback (most recent call last):
File "", line 1, in
File "/usr/local/lib/python2.7/dist-packages/kafka/consumer/group.py", line 284, in init
self._client = KafkaClient(metrics=self._metrics, **self.config)
File "/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)
File "/usr/local/lib/python2.7/dist-packages/kafka/client_async.py", line 791, in check_version
raise Errors.NoBrokersAvailable()
kafka.errors.NoBrokersAvailable: NoBrokersAvailable
您似乎想开始使用消息而不是创建分区。尽管如此 - 你能在 1234 端口到达 kafka 吗? 9092 是 kafkas 默认端口也许你可以试试这个。如果您找到了正确的端口但您的应用程序仍然产生错误,您可以尝试使用控制台消费者来测试您的设置:
bin/kafka-console-producer.sh --broker-list localhost:<yourportnumber> --topic foobar
控制台消费者是标准 kafka 发行版的一部分。也许这会让您更接近问题的根源。
您不能在使用者中创建分区。创建主题时会创建分区。例如使用命令行工具:
bin/kafka-topics.sh \
--zookeeper localhost:2181 \
--create --topic myNewTopic \
--partitions 10 \
--replication-factor 3
这将创建一个新主题 "myNewTopic",其中包含 10 个分区(编号从 0 到 9)和复制因子 3。(参见 http://docs.confluent.io/3.0.0/kafka/post-deployment.html#admin-operations and https://kafka.apache.org/documentation.html#quickstart_createtopic)
在你的consumer中,如果你调用assign()
,就意味着你要消费对应的partition,这个partition必须已经存在。
不知道这个答案是否仍然相关,但最近在无法从主机 Windows OS 访问的 VBox VM 代理中解决了同样的问题。
由于您在 KafkaConsumer 中提到了 bootsrap_servers,我假设您至少使用了 kafka 0.10.0.0
请在server.properties文件中寻找advertised.listeners
属性并设置为PLAINTEXT://localhost:9092
或PLAINTEXT://<broker_ip>:9092
但在您设置之前,请确保您的代理可以从您的消费者所在的环境访问 运行(通过执行 ping <broker_ip>
和 netcat nc -vz <broker_ip> 9092
)。
此外,您需要重新启动 kafka-server 和 consumer/producer(无论 运行 是什么)并尝试 sending/receiving。
例如,如果您是 运行 VM,您可能希望使用 Host-only 适配器使代理可从主机访问
注意:此配置适用于 Kafka Server >= 0.10.X.X 但不适用于 0.8.2.X。没有检查 0.9.0.X
我在kafka streaming的时候遇到了同样的错误。下面的代码解决了我的错误:We need to define the API version in KafkaProducer.
KafkaProducer(bootstrap_servers=['localhost:9092'],
api_version=(0,11,5),
value_serializer=lambda x: dumps(x).encode('utf-8'))
我的问题是防火墙规则,因为我是 运行 Kafka on Google云.
它昨天对我有用,今天我挠头思考了 1 小时,想知道为什么它不再起作用了。
由于每次我连接到不同的 LAN 或 WiFi 时,本地系统的 public IP 地址 都会发生变化,因此我必须允许本地系统的 public 防火墙规则中的 IP。我建议使用具有固定 public IP 的连接,或者在您 switch/change 您的连接时检查此连接。
配置中的这些小改动需要大量调试和修复。感觉为此浪费了一个小时。
NoBrokersAvailable 可能是 kafka 配置中主机名配置错误的答案。
我已经开始学习Kafka了。尝试对其进行基本操作。我一直坚持关于 'Brokers' 的观点。
我的kafka是运行但是当我想创建一个分区时。
from kafka import TopicPartition
(ERROR THERE) consumer = KafkaConsumer(bootstrap_servers='localhost:1234')
consumer.assign([TopicPartition('foobar', 2)])
msg = next(consumer)
traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/dist-packages/kafka/consumer/group.py", line 284, in init self._client = KafkaClient(metrics=self._metrics, **self.config) File "/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) File "/usr/local/lib/python2.7/dist-packages/kafka/client_async.py", line 791, in check_version raise Errors.NoBrokersAvailable() kafka.errors.NoBrokersAvailable: NoBrokersAvailable
您似乎想开始使用消息而不是创建分区。尽管如此 - 你能在 1234 端口到达 kafka 吗? 9092 是 kafkas 默认端口也许你可以试试这个。如果您找到了正确的端口但您的应用程序仍然产生错误,您可以尝试使用控制台消费者来测试您的设置:
bin/kafka-console-producer.sh --broker-list localhost:<yourportnumber> --topic foobar
控制台消费者是标准 kafka 发行版的一部分。也许这会让您更接近问题的根源。
您不能在使用者中创建分区。创建主题时会创建分区。例如使用命令行工具:
bin/kafka-topics.sh \
--zookeeper localhost:2181 \
--create --topic myNewTopic \
--partitions 10 \
--replication-factor 3
这将创建一个新主题 "myNewTopic",其中包含 10 个分区(编号从 0 到 9)和复制因子 3。(参见 http://docs.confluent.io/3.0.0/kafka/post-deployment.html#admin-operations and https://kafka.apache.org/documentation.html#quickstart_createtopic)
在你的consumer中,如果你调用assign()
,就意味着你要消费对应的partition,这个partition必须已经存在。
不知道这个答案是否仍然相关,但最近在无法从主机 Windows OS 访问的 VBox VM 代理中解决了同样的问题。 由于您在 KafkaConsumer 中提到了 bootsrap_servers,我假设您至少使用了 kafka 0.10.0.0
请在server.properties文件中寻找advertised.listeners
属性并设置为PLAINTEXT://localhost:9092
或PLAINTEXT://<broker_ip>:9092
但在您设置之前,请确保您的代理可以从您的消费者所在的环境访问 运行(通过执行 ping <broker_ip>
和 netcat nc -vz <broker_ip> 9092
)。
此外,您需要重新启动 kafka-server 和 consumer/producer(无论 运行 是什么)并尝试 sending/receiving。
例如,如果您是 运行 VM,您可能希望使用 Host-only 适配器使代理可从主机访问
注意:此配置适用于 Kafka Server >= 0.10.X.X 但不适用于 0.8.2.X。没有检查 0.9.0.X
我在kafka streaming的时候遇到了同样的错误。下面的代码解决了我的错误:We need to define the API version in KafkaProducer.
KafkaProducer(bootstrap_servers=['localhost:9092'],
api_version=(0,11,5),
value_serializer=lambda x: dumps(x).encode('utf-8'))
我的问题是防火墙规则,因为我是 运行 Kafka on Google云.
它昨天对我有用,今天我挠头思考了 1 小时,想知道为什么它不再起作用了。
由于每次我连接到不同的 LAN 或 WiFi 时,本地系统的 public IP 地址 都会发生变化,因此我必须允许本地系统的 public 防火墙规则中的 IP。我建议使用具有固定 public IP 的连接,或者在您 switch/change 您的连接时检查此连接。
配置中的这些小改动需要大量调试和修复。感觉为此浪费了一个小时。
NoBrokersAvailable 可能是 kafka 配置中主机名配置错误的答案。