После сбоя консьюмера часть событий Kafka учтена дважды
Сервис читает события из Kafka и пишет их в ClickHouse. После сетевого сбоя и перебалансировки группы консьюмеров в витрине обнаружились дубли: часть событий за минуту до сбоя посчиталась дважды, суммы в отчёте разъехались с источником.
Как правильно смотреть на эту ситуацию?
- Дубли означают ошибку продюсера: при включённой идемпотентности Kafka доставляет каждое сообщение ровно один раз, поэтому искать надо повторную отправку на стороне отправителя.
- Достаточно переключить auto.offset.reset на earliest: этот параметр задаёт, с какого места консьюмер продолжает после перебалансировки, и с ним он перестанет перечитывать обработанное.
- При типовой настройке доставка идёт «как минимум один раз»: сбой между записью данных и фиксацией смещения даёт повторное чтение. Приёмник должен быть готов к дублям: идентификатор события и дедупликация.
- Нужно отключить ретраи в консьюмере и увеличить таймаут сессии: без повторных попыток и лишних перебалансировок дубли не появятся вовсе.
