在Kafka中管理当前偏移

时间:2020-02-04 09:57:44

标签: apache-kafka kafka-consumer-api offset

我在文档中找不到有关kafka如何为使用者管理当前偏移量的任何信息。我猜使用者默认情况下会将最后一个偏移量保留在内存中,并在显式调用commitSynccommitAsync时或根据enable.auto.commit策略进行提交。这是正确的还是我错过了什么?如果有人可以指向偏移管理这一方面的文档或参考,将不胜感激。

谢谢。

1 个答案:

答案 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

相关问题