Требуется уточнение о автоматическом фиксации Kafka и auto.commit.interval.ms

В документе https://www.safaribooksonline.com/library/view/kafka-the-definitive/9781491936153/ch04.html говорится, что "Обратите внимание, что при включенном автоматическом фиксации вызов для опроса всегда фиксирует последнее смещение, возвращаемое предыдущий опрос. Он не знает, какие события были фактически обработаны, поэтому важно всегда обрабатывать все события, возвращаемые опросом, прежде чем снова вызвать опрос (или до вызова функции close() он также автоматически совершит смещения)". Если это так, то как это работает, если auto.commit.interval.ms больше времени, если требуется обработать сообщения, полученные из предыдущего опроса().

Чтобы сделать его более конкретным, рассмотрим сценарий, в котором я следую:

enable.auto.commit = истина

auto.commit.interval.ms = 10

И я вызываю poll() в цикле.

1) При первом вызове poll() я получаю 1000 сообщений (смещение 2000-3000), и для обработки всех 1000 сообщений требуется 1 мс

2) Я снова вызываю poll(). В этом втором вызове poll() он должен зафиксировать последнее смещение 3000, возвращенное из предыдущего опроса(), но поскольку auto.commit.interval.ms установлен в 10 мс, он еще не фиксирует смещение, правильно?

В этом случае исправленное смещение будет отставать и дальше за последним смещением, которое было фактически обработано?

Может ли кто-нибудь уточнить/подтвердить?

Ответ 1

Вы правильно описываете поведение. Однако вы не уверены в правильности вашего заключения. Зафиксированное смещение не будет отставать все дальше и дальше. По завершении интервала автоматической фиксации следующий вызов опроса передаст обработанные сообщения all.

Скажем, вы вызываете опрос каждые 10 мс и устанавливаете интервал фиксации до 100 мс. Таким образом, каждый 10-й вызов опроса будет зафиксирован (и этот фиксатор охватывает все сообщения из последних 10 голосовых вызовов).