Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kafka使用者在关闭后丢失消息状态_Python_Message Queue_Apache Kafka - Fatal编程技术网

Python Kafka使用者在关闭后丢失消息状态

Python Kafka使用者在关闭后丢失消息状态,python,message-queue,apache-kafka,Python,Message Queue,Apache Kafka,谢谢你花时间回答这个问题。我将kafka与python使用者一起使用。当消费者启动并运行时,一切都很好,消息被推送到卡夫卡,然后由消费者阅读 但是,如果消费者因为任何原因而停机,当它返回时,它只会在消费者返回后读取张贴到卡夫卡的新消息。关机和通电之间的消息丢失,也就是说,消费者在返回后没有阅读这些消息 consumer = KafkaConsumer(..) 是我用来创建消费者的工具。您使用的是什么客户端? 可能有必要为耗电元件设置开始偏移。查看seek()函数和自动提交设置。 也许我的代码有

谢谢你花时间回答这个问题。我将kafka与python使用者一起使用。当消费者启动并运行时,一切都很好,消息被推送到卡夫卡,然后由消费者阅读

但是,如果消费者因为任何原因而停机,当它返回时,它只会在消费者返回后读取张贴到卡夫卡的新消息。关机和通电之间的消息丢失,也就是说,消费者在返回后没有阅读这些消息

consumer = KafkaConsumer(..)

是我用来创建消费者的工具。

您使用的是什么客户端? 可能有必要为耗电元件设置开始偏移。查看seek()函数和自动提交设置。 也许我的代码有帮助,但也许我们使用不同的消费者类别(我的:):


您的偏移设置是什么?请尝试在此处使用seek(…)谢谢。最后,我使用KafkaClient(服务器名称:端口)和您对consumer.seek(0,1)的简单使用者的设置。我能够在停机后检索消息。
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**).