我在文档中找不到有关kafka如何为使用者管理当前偏移量的任何信息。我猜使用者默认情况下会将最后一个偏移量保留在内存中,并在显式调用commitSync
或commitAsync
时或根据enable.auto.commit
策略进行提交。这是正确的还是我错过了什么?如果有人可以指向偏移管理这一方面的文档或参考,将不胜感激。
谢谢。
答案 0 :(得分:1)
一个“消费者组” ,是一组消费者,它们被协调以消费来自主题的消息。现在,您的Kafka经纪人之一担任组协调员,负责协调属于该组的所有消费者。
取决于enable.auto.commit
的配置以及它们在代码中处理偏移量管理的方式,它们将被提交并存储在名为__consumer_offsets
的主题中。
如果将enable.auto.commit
设置为True
,那么将在后台定期提交使用者的偏移量。另一方面,commitSync()
和commitAsync()
分别是阻塞调用和非阻塞调用,它们允许手动提交偏移量。如果使用commitSync()
或commitAsync()
之一,建议将enable.auto.commit
设置为False
。
在极少数情况下,您的策略enable.auto.commit
设置为True
,但同时使用commitSync()
或commitAsync()
中的一个,则将提交偏移量在两种情况下:
commitSync()
或commitAsync()
N
毫秒,其中N
是可配置参数(auto.commit.interval.ms
)将enable.auto.commit
设置为true
时,每隔auto.commit.interval.ms
会提交最大偏移量。但是,只有在调用poll()
时才会发生这种情况。在每次轮询(max.poll.interval.ms
)中,都会检查enable.auto.commit
。每当您poll()时,使用者都会检查是否应该提交上次轮询中返回的偏移量。
有关更多详细信息,请参阅Confluent's documentation for Offset Management。