【问题标题】:Messages are not delivered with kafka python消息不使用 kafka python 传递
【发布时间】:2017-07-09 13:29:04
【问题描述】:

我正在尝试使用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')

【问题讨论】:

  • 生产失败后你看到了什么日志?

标签: python apache-kafka kafka-python


【解决方案1】:

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

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

问题是生产者在消息发送之前就被杀死了,因为这个方法是异步的。 如果您添加以下内容,您可以自己查看:

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

看到超时时间为0。

【讨论】:

    【解决方案2】:

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

    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 客户端生成的消息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多