Kafka не про «один раз и навсегда». В живой системе сообщение легко может быть обработано повторно — и это не баг, а обычный сценарий.
Чёрный кейс из продакшена: consumer успел взять сообщение, сделать часть работы, а потом упал до commit offset. Kafka честно отдаст это сообщение снова. Снаружи это выглядит как дубль, а внутри — как повторный платёж, повторная отправка письма, повторное создание заказа.
Ошибка здесь не в Kafka, а в иллюзии “exactly once” там, где её не обеспечили на уровне приложения. Если обработчик не идемпотентен, любой retry превращается в инцидент.
Что делать:
1. Делать обработку идемпотентной по message id.
2. Хранить статус обработки в БД или кеше с TTL.
3. Разделять «получил сообщение» и «завершил бизнес-операцию».
4. Проверять, что retry не ломает внешние API и почту.
Kafka — это не гарантия от дублей. Это просто быстрый и надёжный способ эти дубли получить, если не заложиться на них заранее ⚙️
Host & DNS
@HostDnsPro
Kafka не про «один раз и навсегда». В живой системе сообщение легко может быть обработано повторно — и это не
Этот пост опубликован в Telegram-канале Host & DNS. Подписаться можно по ссылке: @HostDnsPro.