Resetting Offsets
当应用程序启动时,每个已分配分区中的初始位置取决于两个属性 startOffset
和 resetOffsets
。如果 resetOffsets
是 false
,则正常的 Kafka 消费者 link:https://kafka.apache.org/documentation/#consumerconfigs_auto.offset.reset[auto.offset.reset
语义适用。也就是说,如果绑定消费者的分区没有已提交的偏移量,则位置为 earliest
或 latest
。默认情况下,具有显式 group
的绑定使用 earliest
,匿名的绑定(没有 group
)使用 latest
。可以通过设置 startOffset
绑定属性来覆盖这些默认值。当使用特定的 group
第一次启动绑定时,不会有已提交的偏移量。偏移量不存在的另一个条件是偏移量已过期。对于现代代理程序(自 2.1 起)和默认的代理程序属性,偏移量在最后一个成员离开组后 7 天后过期。有关详细信息,请参阅 link:https://kafka.apache.org/documentation/#brokerconfigs_offsets.retention.minutes[offsets.retention.minutes
代理程序属性。
当 resetOffsets
为 true
时,绑定应用与代理上没有已提交偏移量时应用的语义类似,就像此绑定从未从该主题使用过一样;也就是说,将忽略任何当前已提交的偏移量。
以下是可能使用它的两个用例。
-
从包含键/值对的紧凑的主题中使用。将
resetOffsets
设置为true
,将startOffset
设置为earliest
;该粘合剂将对所有新分配的分区执行seekToBeginning
。 -
从包含事件的主题中使用,在该主题中,你只对在该粘合剂运行时发生的事件感兴趣。将
resetOffsets
设为true
,将startOffset
设为latest
;该粘合剂将对所有新分配的分区执行seekToEnd
。
如果在初始分配后重新平衡,则仅在初始分配期间未分配任何新分配的分区上执行查找。
有关主题偏移的更多控制,请参阅 rebalance listener;当提供一个侦听器时,resetOffsets
不应设置为 true
,否则,这将导致错误。