繁体   English   中英

kafka python 不传递消息

[英]Messages are not delivered with kafka python

我正在尝试使用kafka-python设置一个简单的 Kafka 应用程序。 我一直在尝试让我在网上找到的一些示例起作用,但似乎无法做到。 我有一个在 docker 容器中运行的 kafka 实例。 我测试了 shell 工具,实例确实可以正常工作。 我能够发送和接收消息。 我怀疑生产者消息超时。 以下是具有基本相同行为的代码的两个版本:

import time
from kafka import SimpleProducer, KafkaClient
#  connect to Kafka
kafka = KafkaClient('localhost:9092')
producer = SimpleProducer(kafka)
# Assign a topic
topic = 'test'
producer.send_messages(topic, b'this is a message')

第二个版本:

from kafka import KafkaProducer
from kafka.errors import KafkaError

producer = KafkaProducer(bootstrap_servers=['0.0.0.0:9092'], api_version=(0,10))
topic = "test"

producer.send(topic, b'test message')

更改行: producer.send(topic, b'test message')

To: producer.send(topic, b'test message').get(timeout=30) (或您认为合适的任何值)

问题是生产者在发送消息之前被杀死,因为这个方法是异步的。 如果您添加:

import logging
logging.basicConfig(level=logging.INFO)

并看到超时为 0。

这取决于您运行 docker 的方式,但我相信您的问题出在您尝试连接的主机名上。 您需要指向在ADVERTISED_HOST环境变量中设置的主机。 例如,当我运行 kafka-docker 作为docker run --hostname kafka-1 -p 2181:2181 -p 9092:9092 --env ADVERTISED_HOST='kafka-1' --env ADVERTISED_PORT=9092 spotify/kafka我生产到 kafka像这样

from kafka import SimpleProducer, KafkaClient

kafka = KafkaClient('kafka-1:9092')
producer = SimpleProducer(kafka)
topic = 'test'
for i in range(100):
    producer.send_messages(topic, 'hullo-' + str(i))

另外,我需要将127.0.0.1 kafka-1添加到我的/etc/hosts文件中。 这样做之后,我能够使用bin/kafka-console-consumer.sh --bootstrap-server kafka-1:9092 --topic test --from-beginning使用 python 客户端生成的消息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM