NoBrokersAvailable:NoBrokersAvailable-Kafka错误

时间:2016-08-09 15:34:26

标签: python apache-kafka kafka-consumer-api kafka-producer-api kafka-python

我已经开始学习卡夫卡了。尝试基本操作。关于经纪人的问题,我一直在谈论这个问题。

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

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

追踪(最近一次调用最后一次):     文件"",第1行,in     文件" /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" ;,第202行, init       self.config [' api_version'] = self.check_version(timeout = check_timeout)     在check_version中的文件" /usr/local/lib/python2.7/dist-packages/kafka/client_async.py",第791行       引发错误.NoBrokersAvailable()   kafka.errors.NoBrokersAvailable:NoBrokersAvailable

6 个答案:

答案 0 :(得分:2)

看起来您想要开始使用消息而不是创建分区。不过 - 你能在1234号港口抵达卡夫卡吗? 9092是kafkas的默认端口,也许你可以尝试这个。如果您找到了正确的端口,但您的应用程序仍然会产生错误,您可以尝试使用控制台用户来测试您的设置:

bin/kafka-console-producer.sh --broker-list localhost:<yourportnumber> --topic foobar

控制台消费者是标准kafka发行版的一部分。也许这会让你更接近问题的根源。

答案 1 :(得分:2)

您无法在使用者中创建分区。创建主题时会创建分区。例如,使用命令行工具:

bin/kafka-topics.sh \
  --zookeeper localhost:2181 \
  --create --topic myNewTopic \
  --partitions 10 \
  --replication-factor 3

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

在您的消费者中,如果您致电assign(),则表示您要使用相应的分区,此分区必须已存在。

答案 2 :(得分:1)

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

昨天它对我有用,今天我挠头一小时想着为什么现在不起作用。

由于每次连接到不同的LAN或WiFi时,本地系统的公共IP地址都会发生变化,因此我必须在防火墙规则中允许本地系统的公共IP。我建议使用具有固定公共IP的计算机。

我真愚蠢! :p

答案 3 :(得分:0)

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

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

但在设置之前,请确保您的代理可以从运行消费者的环境中访问(通过执行ping localhost)。

此外,您需要重新启动kafka-server和consumer / producer(正在运行的任何内容)并尝试发送/接收。

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

注意:此配置适用于Kafka Server&gt; = 0.10.X.X但不适用于0.8.2.X.尚未检查0.9.0.X

答案 4 :(得分:0)

在卡夫卡串流期间,我也遇到了同样的错误。下面的示例解决了我的错误。我们需要在KafkaProducer中定义API版本。

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

答案 5 :(得分:0)

NoBrokersAvailable可以解决kafka配置中主机名配置错误的问题。