Вопрос с собеседования · Брокеры сообщений

Что такое dead letter queue (DLQ) и зачем она нужна?

SeniorРетраи, 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-сообщения?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования