重置偏移量
当应用程序启动时,每个已分配分区的初始位置取决于两个属性 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。
如果在初始分配后发生重新平衡,那么只会对在初始分配期间未分配的任何新分配分区执行查找操作。
要更精细地控制主题偏移量,请参阅再均衡监听器;当提供了监听器时,不应将 resetOffsets 设置为 true,否则会导致错误。