Resetting Offsets

当应用程序启动时,每个已分配分区中的初始位置取决于两个属性 startOffsetresetOffsets。如果 resetOffsetsfalse,则正常的 Kafka 消费者 link:https://kafka.apache.org/documentation/#consumerconfigs_auto.offset.reset[auto.offset.reset 语义适用。也就是说,如果绑定消费者的分区没有已提交的偏移量,则位置为 earliestlatest。默认情况下,具有显式 group 的绑定使用 earliest,匿名的绑定(没有 group)使用 latest。可以通过设置 startOffset 绑定属性来覆盖这些默认值。当使用特定的 group 第一次启动绑定时,不会有已提交的偏移量。偏移量不存在的另一个条件是偏移量已过期。对于现代代理程序(自 2.1 起)和默认的代理程序属性,偏移量在最后一个成员离开组后 7 天后过期。有关详细信息,请参阅 link:https://kafka.apache.org/documentation/#brokerconfigs_offsets.retention.minutes[offsets.retention.minutes 代理程序属性。

resetOffsetstrue 时,绑定应用与代理上没有已提交偏移量时应用的语义类似,就像此绑定从未从该主题使用过一样;也就是说,将忽略任何当前已提交的偏移量。

以下是可能使用它的两个用例。

  1. 从包含键/值对的紧凑的主题中使用。将 resetOffsets 设置为 true,将 startOffset 设置为 earliest;该粘合剂将对所有新分配的分区执行 seekToBeginning

  2. 从包含事件的主题中使用,在该主题中,你只对在该粘合剂运行时发生的事件感兴趣。将 resetOffsets 设为 true,将 startOffset 设为 latest;该粘合剂将对所有新分配的分区执行 seekToEnd

如果在初始分配后重新平衡,则仅在初始分配期间未分配任何新分配的分区上执行查找。

有关主题偏移的更多控制,请参阅 rebalance listener;当提供一个侦听器时,resetOffsets 不应设置为 true,否则,这将导致错误。