麻烦得到简单的Kafka制作人

时间:2017-09-22 18:36:27

标签: python apache-kafka kafka-python

我在Mac Pro(Sierra; 10.12.6)上本地运行Kafka只是为了开始开发。我已经启动了ZooKeeper和一个Kafka服务器(0.11.0.1):

bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties

我创建了主题:

bin/kafka-topics.sh --list --zookeeper localhost:2181
__consumer_offsets
access
my-topic

(不确定__consumer_offsets是什么,我创建了另外两个)。

我已经安装了kafka-python(1.3.4)。 我的示例程序很简单:

from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers=['localhost:9092'])
producer.send('my-topic', 'Another message')

但它发出以下信息:

Traceback (most recent call last):
  File "produce.py", line 3, in <module>
    producer = KafkaProducer(bootstrap_servers=['localhost:9092'])
  File "/Library/Python/2.7/site-packages/kafka/producer/kafka.py", line 347, in __init__
    **self.config)
  File "/Library/Python/2.7/site-packages/kafka/client_async.py", line 220, in __init__
    self.config['api_version'] = self.check_version(timeout=check_timeout)
  File "/Library/Python/2.7/site-packages/kafka/client_async.py", line 861, in check_version
    raise Errors.NoBrokersAvailable()
kafka.errors.NoBrokersAvailable: NoBrokersAvailable

想法?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

请确保您具有server.config文件中定义的设置  advertised.listeners=PLAINTEXT://your.host.name:9092

主机名称解析可能会提供其他主机名,默认情况下Kafka使用java.net.InetAddress.getCanonicalHostName()

答案 1 :(得分:0)

如果您使用的是wurstmeister / kafka,请注意,在Kafka的最新版本中,许多参数已被弃用。 而不是使用-

KAFKA_HOST: KAFKA_PORT: 9092 KAFKA_ADVERTISED_HOST_NAME: <IP-ADDRESS> KAFKA_ADVERTISED_PORT: 9092

您需要使用- KAFKA_LISTENERS: PLAINTEXT://:9092 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://<IP-ADDRESS>:9092

查看this link以获得更多详细信息