Чем неблокирующий повтор через отдельные retry-топики лучше повтора прямо в обработчике?
- Что такое retry-топики?
Блокирующий повтор в обработчике держит партицию: одно проблемное сообщение задерживает все следующие. Retry-топики уносят сообщение на повтор с задержкой, а партиция продолжает обрабатываться.
- Цепочка: retry-1m → retry-10m → DLQ
- Цена — нарушение порядка для этого ключа
- Для событий одной сущности порядок важен — останавливать ключ, а не партицию
А ещё Spring Kafka: @RetryableTopic
Подробно
Порядок в партиции обрабатывается последовательно, поэтому пауза перед повторной попыткой — это простой для всех сообщений позади. При экспоненциальной задержке в десятки секунд задержка обработки становится катастрофической. Схема с retry-топиками работает иначе: сообщение перекладывается в отдельный топик с нужной задержкой, а основной поток сразу продолжает работу; часто заводят несколько топиков с нарастающими задержками, а после исчерпания попыток сообщение уходит в DLQ. Плата за это — потеря исходного порядка для перенесённых сообщений, и её нужно проговаривать: схема подходит там, где строгий порядок между независимыми сущностями не требуется.
Что хотят услышать
- Проблема блокирующего повтора.
- Устройство retry-топиков.
- Цена: порядок.
Частые ошибки
- Ставить долгие блокирующие паузы внутри обработчика.
- Забывать, что неблокирующий повтор ломает порядок обработки.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Ожидание в обработчике стопорит партицию; retry-топик освобождает основной поток
- ✗Retry-топики гарантируют exactly-once доставку
- ✗Повтор в обработчике вообще невозможен технически
- ✗Retry-топики уменьшают объём хранимых данных
Что спросят дальше
- Как организовать нарастающие задержки между попытками?
- Когда потеря порядка при повторе недопустима?
Разбор темы
- Retries, DLQ и идемпотентность
Что повторять и почему не всё, backoff/jitter, non-blocking retry, дизайн DLQ и redrive, идемпотентность как фундамент.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.