Что такое dead letter queue (DLQ) и зачем она нужна?
- Что делать с сообщением, которое не удаётся обработать?
DLQ — отдельная очередь или топик, куда уходит сообщение после N неудачных попыток, чтобы не блокировать поток и не потеряться.
- Ядовитое сообщение без DLQ бесконечно повторяется и стопорит партицию
- В DLQ — с причиной, стеком, числом попыток, исходным топиком и offset
- У DLQ есть владелец и алерт; разбор и переигрывание после исправления
А ещё В RabbitMQ — DLX, в SQS — redrive policy, в Kafka — отдельный топик (Spring: DeadLetterPublishingRecoverer)
Подробно
Объясни: при повторяющихся ошибках сообщение после ограниченных ретраев (экспоненциальный backoff + jitter) перенаправляется в DLQ; это спасает от poison-message, который иначе застрял бы в цикле ретраев. Различи blocking retry (повтор на месте — держит партицию и тормозит соседние сообщения) и non-blocking retry (через retry-топики). В DLQ-запись кладут payload + причину сбоя + число попыток + исходный топик/offset, иначе разобрать её нельзя. Затем DLQ мониторят, алертят на её рост и делают redrive после фикса.
Что хотят услышать
- Зачем DLQ: не блокировать поток и не терять.
- Когда сообщение туда попадает.
- Что хранить и как разбирать.
Частые ошибки
- Складывать в DLQ без мониторинга — сообщения просто теряются из виду.
- Бесконечно ретраить poison-message.
- Ретраить без backoff/jitter — получить retry storm.
- Класть в DLQ только payload без причины сбоя и offset — разобрать потом невозможно.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Очередь для сообщений с высоким приоритетом, которые надо обработать первыми
- ✗Архив всех успешно обработанных сообщений для аудита
- ✗Очередь, в которую брокер складывает сообщения при переполнении диска
- ✓Куда уходит сообщение после N неудачных попыток, чтобы не блокировать поток и не потерять его
Что спросят дальше
- Чем blocking retry отличается от non-blocking (retry-топики)?
- Что класть в метаданные DLQ-сообщения?
Разбор темы
- Retries, DLQ и идемпотентность
Что повторять и почему не всё, backoff/jitter, non-blocking retry, дизайн DLQ и redrive, идемпотентность как фундамент.
Связанные вопросы
- Какие ошибки обработки сообщения имеет смысл повторять, а какие нет? Middle
- Чем неблокирующий повтор через отдельные retry-топики лучше повтора прямо в обработчике? Senior
- Что важно предусмотреть при проектировании dead letter queue? Middle
- Как сделать обработку запросов надёжной при сбоях и повторах? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.