Вступить в клуб →
средняявопросKafka и надёжность распределённых сервисов

Порядок коммита оффсета и обработки сообщения

Консьюмер платежей с ручным подтверждением оффсетов написан так:

@KafkaListener(topics = "payments", groupId = "billing")
public void listen(PaymentEvent event, Acknowledgment ack) {
    ack.acknowledge();               // подтверждаем оффсет
    paymentService.process(event);   // может упасть: недоступна БД, ошибка бизнес-логики
}

К каким последствиям приведёт такой порядок вызовов?

  • При ошибке обработки сообщение теряется: оффсет уже сдвинут, и после перезапуска чтение продолжится со следующего события
  • Сообщение будет обработано повторно после перезапуска, потому что неуспешная обработка отменяет подтверждение
  • Последствий нет: оффсет фактически фиксируется после выхода из метода, порядок строк в методе не влияет
  • Проблема проявится только при выключенном ручном подтверждении оффсетов, а при ручном режиме порядок безопасен

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела