После деплоя часть сообщений теряется на завершении подов
Kafka-консьюмер живёт в Kubernetes. При каждом релизе часть событий не доезжает до базы, а в DLQ ничего нет. В коде есть обработчик сигнала:
sig := <-signals // SIGTERM
log.Info("shutting down")
os.Exit(0)
Какой порядок завершения правильный?
- По SIGTERM снять readiness, перестать забирать новые сообщения, дообработать взятые, зафиксировать offset и закрыть консьюмер и продюсер
- Оставить `os.Exit(0)`: незафиксированные сообщения Kafka переотправит после ребаланса, а дубли снимет идемпотентность
- Полагаться на liveness probe: она снимет трафик и дождётся конца обработки, поэтому завершение можно оставить мгновенным
- Увеличить число реплик перед релизом: оставшиеся поды подхватят партиции при ребалансе и доберут потерянные сообщения
