重置偏移量
当应用程序启动时,每个已分配分区中的初始位置取决于 startOffset
和 resetOffsets
这两个属性。
如果 resetOffsets
为 false
,则应用正常的 Kafka 消费者 auto.offset.reset
语义。
即,如果绑定(binding)的消费者组(consumer group)没有为某个分区提交偏移量,则位置为 earliest
或 latest
。
默认情况下,具有显式 group
的绑定使用 earliest
,而匿名绑定(没有 group
)使用 latest
。
这些默认值可以通过设置 startOffset
绑定属性来覆盖。
当绑定首次以特定 group
启动时,将不会有已提交的偏移量。
没有已提交偏移量的另一种情况是偏移量已过期。
使用现代 Broker(自 2.1 版本起)和默认的 Broker 属性,偏移量在最后一个成员离开组后 7 天过期。
有关更多信息,请参阅 offsets.retention.minutes
Broker 属性。
当 resetOffsets
为 true
时,Binder 会应用类似于 Broker 上没有已提交偏移量时所应用的语义,就好像此绑定从未消费过该主题一样;即,任何当前的已提交偏移量都将被忽略。
以下是两种可能使用此功能的情况。
-
消费包含键/值对的压缩主题。 将
resetOffsets
设置为true
并将startOffset
设置为earliest
;绑定将对所有新分配的分区执行seekToBeginning
。 -
消费包含事件的主题,而你只对该绑定运行时发生的事件感兴趣。 将
resetOffsets
设置为true
并将startOffset
设置为latest
;绑定将对所有新分配的分区执行seekToEnd
。
如果在初始分配后发生再平衡,则寻求操作将仅在初始分配期间未分配的任何新分配的分区上执行。
有关主题偏移量的更多控制,请参阅 再平衡监听器;提供监听器时,不应将 resetOffsets
设置为 true
,否则会导致错误。