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