一旦所有消息被消费,如何关闭kafka消费者?

时间:2017-07-17 12:26:43

标签: python python-3.x kafka-consumer-api

我有以下程序来使用所有发往Kafka的邮件。

from kafka import KafkaConsumer

consumer = KafkaConsumer('my_test_topic',
                         group_id='my-group',
                         bootstrap_servers=['my_kafka:9092'])
for message in consumer:
    consumer.commit()
    print ("%s key=%s value=%s" % (message.topic,message.key,
                                          message.value))
KafkaConsumer.close()

使用上述程序,我可以使用所有来到Kafka的消息。但是一旦所有消息被消费,我想关闭没有发生的kafka消费者。我需要帮助。

3 个答案:

答案 0 :(得分:2)

如果我向KafkaConsumer对象提供 consumer_timeout_ms参数,我现在可以关闭kafka使用者。它接受以毫秒为单位的超时值。 以下是代码段。

from kafka import KafkaConsumer

consumer = KafkaConsumer('my_test_topic',
                         group_id='my-group',
                         bootstrap_servers=['my_kafka:9092'],
                         consumer_timeout_ms=1000)
for message in consumer:
    consumer.commit()
    print ("%s key=%s value=%s" % (message.topic,message.key,
                                          message.value))
KafkaConsumer.close()

在上面的代码中,如果消费者在1秒内没有看到任何消息,它将关闭会话。

答案 1 :(得分:0)

看起来你想要consumer.close()而不是KafkaConsumer.close()。它没有记录为静态方法。

答案 2 :(得分:-1)

我可以使用这样的代码关闭Kafka流

import sys 
from kafka import KafkaConsumer
consumer = KafkaConsumer('topic', bootstrap_servers='www.myserver.com:9000', auto_offset_reset='earliest')

count = 0 
for msg in consumer:
    count += 1
    print (msg.value.decode('ascii'))
    if count == 100:
        break

consumer.close()

上面的代码将打印该主题的前100条消息。