Когда вы фиксируете (автоматическое или ручное изменение не имеет большого значения), вы сохраняете на стороне брокера запись о том, как далеко в разделе достиг потребитель. Это зафиксированное смещение всегда используется только в случае перебалансировки, поэтому, когда потребителю назначается этот раздел, он может получить информацию с момента, когда все предыдущие сообщения, как известно, были обработаны. Это обеспечивает гарантию того, что при правильном кодировании потребителей сообщения не будут потеряны при потреблении в случае изменений в членстве в группе, когда сообщения обрабатываются последовательно.
Когда членство в группе стабильно, то зафиксированное смещение ничего не делает. Каждый потребитель имеет свое собственное смещение в памяти, которое он поддерживает и использует каждый раз, когда он выбирает пакет записей у брокера. По умолчанию это смещение увеличивается последовательно. Метод seek только изменяет это смещение в памяти, так что следующий опрос будет извлекаться из любого произвольного смещения, которое вы указали, если только оно не существует, и в этом случае будет выдано исключение.
Если вы сохраняете смещения фиксации извне, тогда поиск может использоваться после перебалансировки для извлечения сохраненных извне смещений и выборки оттуда, но в этом случае вам придется вызывать функцию поиска в RebalanceListener - если вы вызываете функцию поиска до Опрос не будет иметь никакого эффекта, так как потребитель узнает только о перебалансировании и назначении нового раздела во время метода опроса, и поэтому без вмешательства во время опроса он будет потреблять из последнего зафиксированного смещения.
Эта немного неинтуитивная ситуация также возникает, когда вы останавливаете потребителей, о чем я писал на https://chrisg23.blogspot.com/2020/02/why-is-pausing-kafka-consumer-so.html?m=1