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