Какие ошибки обработки сообщения имеет смысл повторять, а какие нет?
- Какие ошибки обработки сообщений повторять?
Временные сбои (таймаут, недоступность зависимости, блокировка в базе, 503) — повторять с отсрочкой. Постоянные (невалидные данные, ошибка десериализации, нарушение бизнес-правила) — сразу в DLQ.
- Бесконечный повтор ядовитого сообщения останавливает партицию
- Ограниченное число попыток с экспоненциальной отсрочкой
- Классификация исключений: retryable и non-retryable
А ещё В Spring Kafka — DefaultErrorHandler с addNotRetryableExceptions
Подробно
Разделение по природе ошибки — основа всей схемы обработки сбоев. Временный сбой пройдёт при следующей попытке, поэтому повтор с задержкой оправдан. Ошибка в данных воспроизведётся всегда: повторяя её, вы жжёте ресурсы, забиваете логи и, в случае Kafka, останавливаете всю партицию, потому что смещение не двигается. Практическая рекомендация — явно классифицировать исключения в коде обработчика, а не полагаться на общий catch: список повторяемых исключений задаётся осознанно, всё остальное сразу уходит в DLQ. Отдельно стоит помнить, что при повторах обработка обязана быть идемпотентной, иначе успешный побочный эффект выполнится дважды.
Что хотят услышать
- Разделение на временные и постоянные ошибки с примерами.
- Ограничение повторов и отсрочка.
- DLQ для постоянных.
Частые ошибки
- Ловить общее исключение и повторять всё подряд.
- Не ограничивать число попыток и получить бесконечный цикл.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Временные сбои: недоступность базы, таймаут внешнего сервиса
- ✓Не повторять ошибки в данных: невалидный формат, нет обязательного поля
- ✓Постоянные ошибки сразу отправлять в DLQ, не блокируя поток
- ✗Повторять любые ошибки без ограничений — рано или поздно обработка всё равно пройдёт успешно
Что спросят дальше
- Почему ядовитое сообщение в Kafka блокирует всю партицию?
- Зачем нужен джиттер в задержке между попытками?
Разбор темы
- Retries, DLQ и идемпотентность
Что повторять и почему не всё, backoff/jitter, non-blocking retry, дизайн DLQ и redrive, идемпотентность как фундамент.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.