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