Kafka Auto-Commit не действует для медленных транзакций - PullRequest
0 голосов
/ 23 января 2020

Использование Spring Boot Kafka - v 2.2.1.RELEASE (которая использует kafka-clients.jar v 2.3.1)

Я использую confluent v 5.1.2 для моего Kafka Broker.

Я включил автокоммит в true и интервал автокоммитирования каждые 3 секунды.

У меня есть класс слушателей на основе пружины (@KafkaListener), и обработка каждого сообщения занимает около 6-7 секунд, так как ресурсоемкая операция.

Здесь я заметил, что смещения никогда не фиксируются слушателем, и задержка постоянно остается равной "550".

Из-за этого (я думаю) сообщения бесконечно обрабатываются слушателем.

Когда я изменил слушателя на ручную фиксацию смещения, он работает нормально.

Почему автокоммит не работает в моем случае, когда задействована длительная транзакция ?

Отсутствуют ли какие-либо настройки или установлено слишком маленькое / большое число? Я хотел бы знать, какова рекомендуемая стратегия для таких длительных транзакций.

Спасибо!

1 Ответ

0 голосов
/ 23 января 2020

Автоматическая фиксация выполняется в потоке потребителя, поэтому auto.commit.interval.ms следует рассматривать как минимум - фактическая фиксация не произойдет до следующего опроса.

Однако Spring рекомендует не использовать автоматическую фиксацию и разрешить контейнер выполнять коммиты (например, с AckMode.RECORD); это более определенно c и надежно.

...