我是卡夫卡的新手。通过kafka-python的一些在线教程的帮助,我编写了以下代码:
from kafka import SimpleProducer, KafkaClient, KafkaConsumer
kafka = KafkaClient("localhost:9092")
producer = SimpleProducer(kafka)
producer.send_messages(b'my-topic', b'this method', b'Hello World')
consumer = KafkaConsumer('my-topic',
group_id='my_group',
bootstrap_servers=['localhost:9092'])
for message in consumer:
print("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,
message.offset, message.key,
message.value))
但问题是,最后一次循环代码执行被卡住了,我无法弄清楚。
答案 0 :(得分:2)
您的原始代码是正确的。我运行您的代码。 KafkaConsumer可用于使用消息。如果您打开另一个控制台,并运行相同的原始代码,您将看到输出。
在http://kafka-python.readthedocs.org/en/latest/apidoc/kafka.consumer.html中,有许多Consumer类,例如SimpleConsumer,KafkaConsumer,Consumer等。为什么代码卡在for循环中?因为默认情况下,代码中的使用者设置为使用新消息。在这种情况下,consumer.send_messages()函数生成的消息不会被消费者使用。
顺便说一句,如果你使用SimpleConsumer,你可以使用seek()来设置你想要消费的消息的偏移量。