Как работает Kafka consumer auto commit?

Я читаю этот:

автоматическая фиксация самый простой способ фиксации смещений-разрешить потребитель сделает это за вас. Если настроить включение.автоматический.совершать=истина, тогда каждые пять секунд потребитель будет совершать наибольшее смещение ваш клиент получил от poll(). Пятисекундный интервал - это по умолчанию и управляется установкой auto.совершить.интервал.ms. Просто как и все остальное в потребителе, автоматические фиксации управляются по циклу опроса. Всякий раз, когда вы опрашиваете, потребитель проверяет, пришло ли время для фиксации, и если это так, он будет фиксировать смещения, которые он вернул в последний опрос.

возможно, проблема в том, что мой английский не очень хорош, но я не полностью понял это описание.

допустим, я использую автоматическую фиксацию с интервалом по умолчанию-5 сек, а опрос происходит каждые 7 сек. В этом случае фиксация будет происходить каждые 5 сек или каждые 7 сек?

можете ли вы уточнить поведение, если опрос будет бывает каждые 3 сек? Будет ли фиксация происходить каждые 5 сек или каждые 6 сек?
Я читал этот:

Auto commits: вы можете установить авто.совершать true и установить авто.совершить.интервал.свойство ms со значением в миллисекундах. Однажды вы включили это, потребитель Kafka зафиксирует смещение последнее сообщение, полученное в ответ на его вызов poll (). Вызов poll() выдается в фоновом режиме на съемочной площадке авто.совершить.интервал.госпожа

и это противоречит ответа.

можете ли вы объяснить это в деталях.

допустим, у меня есть такая диаграмма:

0 сек - опрос
4 сек - опрос
8 сек - опрос

когда будет зафиксировано смещение и когда какое?

2 ответов


проверка Автокоммита вызывается в каждом опросе, и он проверяет, что прошедшее время больше ,чем настроенное время, если да, то делает фиксацию.

если интервал фиксации составляет 5 секунд, а опрос происходит через 7 секунд, В этом случае фиксация произойдет через 7 сек


Он попытается autocommit как можно скорее после завершения опроса. Вы можете посмотреть исходный код consumer coordinator, который имеет набор локальных полей, определенных на уровне класса, чтобы понять, включена ли автокоммит, каков интервал и какой следующий крайний срок для выполнения автоматическая фиксация.

https://github.com/apache/kafka/blob/10cd98cc894b88c5d1e24fc54c66361ad9914df2/clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerCoordinator.java#L625

и одно из мест в опросе, которые выполняют вызов для хранения https://github.com/apache/kafka/blob/10cd98cc894b88c5d1e24fc54c66361ad9914df2/clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerCoordinator.java#L279

Это, как говорится, например, опрос выполняется каждые 7 секунд, а autocommit установлен в 5:

0-опрос, + установить крайний срок до 5-й секунды

7-опрос + фиксация из-за крайнего срока, обновление крайнего срока до 7+5=12

14-опрос + фиксация из-за крайнего срока, обновление сроку 12+5=17

однако, если опрос установлен на каждые 3 секунды, а автокоммит установлен на 5:

0-опрос, + установить крайний срок до 5-й секунды

3 - опрос, без совершения

6-опрос + фиксация из-за крайнего срока, обновление крайнего срока до 6+5=11