【问题标题】:Streaming Kafka with Python :kafka.errors.NoBrokersAvailable: NoBrokersAvailable使用 Python 流式传输 Kafka:kafka.errors.NoBrokersAvailable: NoBrokersAvailable
【发布时间】:2021-06-09 07:07:14
【问题描述】:

我已经尝试过this tutorial 并成功使用了在我工作地点的服务器上发布的 kafka 主题。我不是生产者,只是纯粹的消费者。但是,该教程中的代码是在终端中流式传输的。现在我想用 Python 尝试一下,并将消息记录到文本文件(或类似的文件)中。

这是我使用的代码,在阅读了几个线程和教程之后(例如here):

from kafka import KafkaConsumer

bootstrap_servers = ['xxxxxx:xxxx']
topicName: = 'my_topic_name'
consumer = KafkaConsumer(topicName, group_id='group1', bootstrap_servers=bootstrap_servers, consumer_timeout_ms=1000)

for msg in consumer:
    print(msg.value)

这里我想先打印出消息。但我在 1000 毫秒超时后收到此错误:

kafka.errors.NoBrokersAvailable: NoBrokersAvailable

这听起来合乎逻辑,因为需要代理,而上面的代码似乎对代理没有任何作用。

如果我不设置consumer_timeout_ms=1000ms,Python 控制台就会卡住,不显示任何内容。

我该如何解决这个问题?

更多详情: 我正在并行执行以下操作:

1 - 在一个终端中运行 zookeeper

2 - 在另一个终端运行 kafka 集群

3 - 使用命令kafka-consumer-console 在另一个终端中(很好地)流式传输主题

4 - 在另一个终端中,运行此问题中的 Python 代码。

所有这些终端都是 WLS2 (Windows) 中的 Ubuntu。

【问题讨论】:

  • 卡住而不显示任何内容 - 因为您的主题没有任何内容...也许? 上面的代码似乎对代理没有任何作用 - 是的,bootstrap_servers。听起来您的网络配置错误或您提供了错误的地址

标签: python apache-kafka


【解决方案1】:

如果您能够将 WSL 终端与 kafka-console-consumer 一起使用,那么运行 Python 代码 那里 应该可以正常工作。

如果您要连接到远程 Kafka 服务器,WSL2 网络设置可能根本无法访问该地址。 (其他地方的多个问题都在谈论 WSL2 并且没有外部互联网访问权限)。因此,您应该真正考虑在 Windows 主机本身上运行 Python 代码。否则,听起来您需要调整网络配置。


for 循环将等待 消息发送到主题,在您向消费者添加另一个参数告诉它之前不会读取现有数据


FWIW,您可以使用kafka-console-consumer ... >> file.txt 写入文件

【讨论】:

  • @OneCricketeet 感谢您的回复。我已经更新了我的问题。当消息到达kafka-console-consumer 时,我可以很好地看到它们。但我在运行 Python 代码的终端上收到 No broker 错误。
  • 那么,您的引导服务器是什么? localhost:9092?并且您在与控制台使用者命令完全相同的终端中运行 Python 代码?并使用相同的引导服务器?
  • 这是一个 DNS 名称:9093。Python 代码和kafka-console-consumer 相同。它们位于两个不同的终端上:一个运行控制台,一个运行 Python。
  • 这是在我的工作地点传输数据的服务器和端口地址。我没有在producer 方面做任何事情。
  • 我仍然无法运行 Python 代码。但是您的>> file.txt 建议在kafka-console-consumer 上对我有用。我将其标记为已关闭。
猜你喜欢
  • 1970-01-01
  • 2012-11-03
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2021-10-03
  • 2015-10-28
  • 2011-12-21
相关资源
最近更新 更多