Kafka消费者在关机后丢失消息状态

时间:2016-01-08 19:15:00

标签: python message-queue apache-kafka

感谢您抽出宝贵时间回答这个问题。我正在使用kafka与python消费者。当消费者启动并运行并且消息被推送到kafka然后由消费者阅读时,一切都很有效。

但是,如果消费者由于某种原因而失败,当它重新启动时,它只会读取消费者备份后发布到kafka的新消息。 shutdown-poweron之间的消息丢失,也就是说,消费者在重新启动后不会读取这些消息。

consumer = KafkaConsumer(..)

是我用来创建消费者的。

1 个答案:

答案 0 :(得分:0)

您使用的是哪个客户? 也许有必要为消费者设置起始偏移量。看看seek()函数和自动提交设置。 可能我的代码有帮助,但也许我们使用不同的消费者类(我的:http://kafka-python.readthedocs.org/en/latest/apidoc/kafka.consumer.html):

def connect(self):
        '''Initialize Kafka Client and Consumer.'''
        try:
            print "Try to init KafkaClient:", self.Brokers
            self.__kafka_client = KafkaClient( self.Brokers )


            print "Try to init Kafka Consumer."
            self.__consumer = SimpleConsumer(
                    self.__kafka_client,
                    self.GroupID,
                    self.Topic,
                    auto_commit = True,
                    partitions=self.Partitions,
                    auto_commit_every_n = 100,
                    auto_commit_every_t=5000,
                    fetch_size_bytes=4096,
                    buffer_size=4096,
                    max_buffer_size=32768,
                    iter_timeout=None,
                    auto_offset_reset='largest' )


            print "Set the starting offset."
            self.__consumer.seek(0, self.OffsetMode)


self.__consumer.seek(0, 0) =>start reading from the beginning of the queue.
self.__consumer.seek(0, 1) =>start reading from current offset.
self.__consumer.seek(0, 2) =>skip all the pending messages and start reading only new messages (** maybeyour case**).