Kafka-consumer, который “иногда” читает одно и то же сообщение дважды — это не баг, а reminder, что у вас нет идемпотентности.
В distributed systems retry — не исключение, а дефолт: consumer упал, offset не закоммитился, сообщение прилетело повторно.
И вот ваш “один” signup превращается в два письма, два списания, две записи в CRM 😬
Для growth это особенно больно:
— искажается CAC/LTV
— ломаются A/B-метрики
— CRM начинает жить своей жизнью
— алерты о “взрывном росте” оказываются просто дублями
Чек-лист перед запуском:
1. Любой side effect должен быть idempotent
2. Дедуп по message_id / event_id
3. Коммит offset только после успешной обработки
4. Ретраи — с backoff, а не с верой в лучшее
Kafka не “дублирует” сообщения. Она просто честно показывает, где у вас заканчивается инженерная дисциплина.
Growth Lab
@GrowthLabHub
Kafka-consumer, который “иногда” читает одно и то же сообщение дважды — это не баг, а reminder, что у вас нет
Этот пост опубликован в Telegram-канале Growth Lab. Подписаться можно по ссылке: @GrowthLabHub.