Kafka - Offset Commit & Seek - PullRequest
       8

Kafka - Offset Commit & Seek

0 голосов
/ 13 марта 2020

В настоящее время я работаю над извлечением сообщений из тем с указанным смещением c. Я использую seek () для достижения этой цели. Но когда я настраиваю enable.auto.commit на true или использую ручной синтаксис c ( commitSyn c () / commitAsyn c () ), Seek () не работает, так как он не опрашивает сообщения из указанного смещения c, а выбирает из последнего зафиксированного смещения ,

Так что при использовании Seek () обязательно ли сохранять смещения во внешней БД, а не фиксировать в Kafka? И Seek, и Commit не будут работать параллельно?

Версия клиента - kafka-clients - 2.4.0

Спасибо !!

1 Ответ

0 голосов
/ 12 апреля 2020

Когда вы фиксируете (автоматическое или ручное изменение не имеет большого значения), вы сохраняете на стороне брокера запись о том, как далеко в разделе достиг потребитель. Это зафиксированное смещение всегда используется только в случае перебалансировки, поэтому, когда потребителю назначается этот раздел, он может получить информацию с момента, когда все предыдущие сообщения, как известно, были обработаны. Это обеспечивает гарантию того, что при правильном кодировании потребителей сообщения не будут потеряны при потреблении в случае изменений в членстве в группе, когда сообщения обрабатываются последовательно.

Когда членство в группе стабильно, то зафиксированное смещение ничего не делает. Каждый потребитель имеет свое собственное смещение в памяти, которое он поддерживает и использует каждый раз, когда он выбирает пакет записей у брокера. По умолчанию это смещение увеличивается последовательно. Метод seek только изменяет это смещение в памяти, так что следующий опрос будет извлекаться из любого произвольного смещения, которое вы указали, если только оно не существует, и в этом случае будет выдано исключение.

Если вы сохраняете смещения фиксации извне, тогда поиск может использоваться после перебалансировки для извлечения сохраненных извне смещений и выборки оттуда, но в этом случае вам придется вызывать функцию поиска в RebalanceListener - если вы вызываете функцию поиска до Опрос не будет иметь никакого эффекта, так как потребитель узнает только о перебалансировании и назначении нового раздела во время метода опроса, и поэтому без вмешательства во время опроса он будет потреблять из последнего зафиксированного смещения.

Эта немного неинтуитивная ситуация также возникает, когда вы останавливаете потребителей, о чем я писал на https://chrisg23.blogspot.com/2020/02/why-is-pausing-kafka-consumer-so.html?m=1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...