[英]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.