python kafka在Windows上返回';nodenoteradeyerror';

python kafka在Windows上返回';nodenoteradeyerror';,python,windows,apache-kafka,Python,Windows,Apache Kafka,我能够使用优秀的软件包从卡夫卡主题(运行OSX)流式传输消息,例如: from kafka import KafkaConsumer consumer = KafkaConsumer('MyTopic', group_id='alex', bootstrap_servers=['kafka:9092'], auto_offset_reset='l

我能够使用优秀的软件包从卡夫卡主题(运行OSX)流式传输消息,例如:

from kafka import KafkaConsumer

consumer = KafkaConsumer('MyTopic',
                         group_id='alex',
                         bootstrap_servers=['kafka:9092'],
                         auto_offset_reset='largest')

for message in consumer:
    print message.value
一位运行Windows7的同事问我,他是否可以使用相同的方法进行流式处理/过滤/警报。“没问题,”我说。我们安装了和,并尝试流式传输一些消息

不幸的是,在运行consumer几分钟后,将显示以下消息:

File "C:\Users\[my_colleague]\AppData\Local\Continuum\Anaconda2\lib\site-packages\kafka\client_async.py", line 598, in connect
    raise Errors.NodeNotReadyError(node_id)
kafka.common.NodeNotReadyError: None
我怀疑Windows防火墙正在阻止消费者和代理之间的通信,因此我们简单地将Pycharm和python.exe添加到可以穿越防火墙的程序列表中。那没用


在这一点上,我对这个问题有一种归属感,我应该避免在排除故障时垄断他的笔记本电脑。鉴于Python、Kafka和Windows的流行,我想我们不是第一个面对这个问题的人。你能看到我们做错了什么吗?

这实际上是试图自动探测你的代理版本时的一个错误。这是一个非标准特性,我们添加到python客户机中,使使用同一客户机的代理版本之间的互操作更加容易。我强烈建议,一旦通过了开发阶段,就应该使用
api\u version
参数显式地传递代理版本。探测版本由kafka python记录,以防您想要验证,但从注释来看,这里的版本似乎是0.9。所以在这里

consumer = KafkaConsumer('MyTopic',
                         api_version=(0, 9),
                         group_id='alex',
                         bootstrap_servers=['kafka:9092'],
                         auto_offset_reset='largest')

你用的是什么版本的卡夫卡?好问题,鹦鹉螺。我们用的是卡夫卡2.0.0。没有卡夫卡2.0.0版本,可能是0.9.0?你说得对。我们正在运行“ApacheKafka的Cloudera发行版”2.0.0,令人困惑的是,它基于ApacheKafka 0.9.0.0()。好的,(我不确定Cloudera的发行版)我认为您可以通过使用/bin/windows文件夹中的脚本轻松测试机器是否存在问题,您可以从那里为消费者提供午餐。在本文中,有一部分专门介绍了如何在linux上运行它,但我认为在windows中类似于run。