簡體   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