所以我对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.
答案 0 :(得分:1)
您似乎在客户端配置中使用了错误的主机。 localhost:2181
通常是Zookeeper服务器。
要使您的客户端正常工作,您需要将bootstrap_servers
设置为Kafka代理主机名和端口。默认情况下为localhost:9092
。
请参见https://kafka-python.readthedocs.io/en/latest/apidoc/KafkaProducer.html