Python kafka使用者不会使用来自生产者的消息

时间:2019-02-07 16:50:49

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

所以我对Kafka还是陌生的。我试图运行一个简单的Kafka消费者和生产者。当我运行使用者时,它会在for循环之前打印问候。但是在for循环中什么都没有输出,这使我相信它永远不会首先进入for循环,并且使用者也不会使用生产者的消息。我在Linux系统上运行它。

任何人都可以就生产者或消费者的问题提出建议吗?我已经显示了生产者代码和消费者代码,它们只是几行代码。

这是我的制作人:

from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='localhost:2181',api_version=(1,0,1))
producer.send('MyFirstTopic1', 'Hello, World!')

这是我的消费者:

from kafka import KafkaConsumer,KafkaProducer,TopicPartition,OffsetAndMetadata
consumer = KafkaConsumer(
 bootstrap_servers=['localhost:2181'],api_version=(1,0,1),
 group_id=None,
 enable_auto_commit=False,
 auto_offset_reset='smallest'
)
consumer.subscribe('MyFirstTopic1',0)
print("hello")
for message in consumer:
 print(message)

所以当运行我的生产者时,它最终会出现错误。任何人都知道这意味着什么,如果这可能是错误的。

File "producer.py", line 3, in <module>
    producer.send('MyFirstTopic1', 'Hello, World!')
  File "/usr/local/lib/python3.5/site-packages/kafka/producer/kafka.py", line 543, in send
    self._wait_on_metadata(topic, self.config['max_block_ms'] / 1000.0)
  File "/usr/local/lib/python3.5/site-packages/kafka/producer/kafka.py", line 664, in _wait_on_metadata
    "Failed to update metadata after %.1f secs." % max_wait)
kafka.errors.KafkaTimeoutError: KafkaTimeoutError: Failed to update metadata after 60.0 secs.

1 个答案:

答案 0 :(得分:1)

您似乎在客户端配置中使用了错误的主机。 localhost:2181通常是Zookeeper服务器。

要使您的客户端正常工作,您需要将bootstrap_servers设置为Kafka代理主机名和端口。默认情况下为localhost:9092

请参见https://kafka-python.readthedocs.io/en/latest/apidoc/KafkaProducer.html