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