Получить доступ

Зачем нужен prefetch (basic.qos) в RabbitMQ и что будет при слишком большом значении?

MiddleRabbitMQ и SQSRabbitMQ
Ещё спрашивают так:
  • Что такое basic.qos в RabbitMQ?
Коротко

Prefetch — сколько неподтверждённых сообщений брокер выдаёт потребителю. Регулирует справедливое распределение и память — это backpressure.

  • Без лимита брокер отдаст всю очередь первому потребителю — остальные простаивают, память растёт
  • Маленький prefetch (1–10) — справедливо для долгих задач
  • Большой (100–300) — выше пропускная способность для быстрых

А ещё Подбирают по времени обработки и задержке сети

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Без ограничения брокер может разом отгрузить быстрому consumer-у кучу сообщений, и пока он их жуёт, остальные простаивают, а память consumer-а пухнет. basic.qos(prefetch) задаёт, сколько сообщений consumer может держать неподтверждёнными одновременно — это форма backpressure и справедливого распределения. prefetch=1 даёт максимально равномерное распределение (round-robin по готовности), но больше round-trip; умеренное значение балансирует пропускную способность и честность. Слишком большое значение возвращает проблему неравномерности и роста памяти.

Что хотят услышать

  • Что ограничивает prefetch.
  • Проблемы слишком большого значения.
  • Как подбирать.

Частые ошибки

  • Оставлять unlimited prefetch и удивляться неравномерной нагрузке.
  • Всегда ставить prefetch=1 даже для лёгких быстрых задач (теряется throughput).

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Prefetch ограничивает число неподтверждённых сообщений у одного consumer-а; слишком большой prefetch ломает справедливое распределение и грузит память, слишком маленький — снижает throughput
  • ✗Prefetch задаёт срок жизни сообщения в очереди
  • ✗Prefetch включает шифрование канала
  • ✗Prefetch определяет число партиций очереди

Что спросят дальше

  • Как prefetch связан с manual ack?
  • Почему prefetch=1 даёт самое честное распределение?

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем