【问题标题】:NoBrokersAvailable: NoBrokersAvailable-Kafka ErrorNoBrokersAvailable:NoBrokersAvailable-Kafka 错误
【发布时间】:2016-12-15 17:58:09
【问题描述】:

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

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

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

traceback(最近一次调用最后一次): 文件“”,第 1 行,在 init 中的文件“/usr/local/lib/python2.7/dist-packages/kafka/consumer/group.py”,第 284 行 self._client = KafkaClient(metrics=self._metrics, **self.config) init 中的文件“/usr/local/lib/python2.7/dist-packages/kafka/client_async.py”,第 202 行 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

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    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-operationshttps://kafka.apache.org/documentation.html#quickstart_createtopic

    在你的消费者内部,如果你调用assign(),表示你要消费对应的分区,并且这个分区必须已经存在。

    【讨论】:

      【解决方案3】:

      不知道这个答案是否仍然相关,但最近在无法从主机 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,您可能希望使用 Host-only 适配器来使代理可以从主机访问

      注意:此配置适用于 Kafka Server >= 0.10.X.X,但不适用于 0.8.2.X。尚未检查 0.9.0.X

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

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

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

          【讨论】:

            【解决方案6】:

            NoBrokersAvailable 可能是 kafka 配置中主机名配置错误的答案。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-04-18
              • 1970-01-01
              • 2016-03-27
              • 2018-06-09
              • 1970-01-01
              • 2023-03-22
              • 1970-01-01
              相关资源
              最近更新 更多