使用kafka-python检索主题中的消息

时间:2020-03-01 20:15:36

标签: python apache-kafka kafka-consumer-api kafka-python

我已经使用kafka-python库编写了一个python脚本,该库将消息写入kafka和从中读取消息。我写消息没有任何问题;我可以使用kafka控制台工具来检索它们。但是我无法使用python脚本读取它们。我的消费者有一个for,它冻结在迭代的第一行,并且永远不会返回。这是我的代码:

from kafka import KafkaConsumer

consumer = KafkaConsumer(
    "my-topic",
    bootstrap_servers="localhost:9092"),
    value_deserializer=lambda v: json.dumps(v).encode("utf-8")
)

for msg in consumer:
    print(type(msg))

创建并完全订阅了使用者;我可以看到my-topic在其_client属性的主题列表中。

有什么主意吗?

1 个答案:

答案 0 :(得分:1)

默认情况下,kafka python从上一个偏移量开始,即仅读取新消息。 一种方法是从头开始阅读,另一种方法是将轮询主题保持在无限循环中,如以下代码所示:

while True:
    try:
        records = consumer.poll(60 * 1000) # timeout in millis , here set to 1 min

        record_list = []
        for tp, consumer_records in records.items():
            for consumer_record in consumer_records:
                record_list.append(consumer_record.value)
        print(record_list) # record_list will be list of dictionaries

编辑

要从头开始阅读,我们需要在使消费者成为对象时尽早添加auto_offset_reset=earliest

consumer = KafkaConsumer(
    "my-topic",
    bootstrap_servers="localhost:9092"),
    value_deserializer=lambda v: json.dumps(v).encode("utf-8"),
    auto_offset_reset='earliest')

让我知道这是否有帮助!

相关问题