advanced
RabbitMQ prefetch
Настраивайте prefetch, чтобы bound unacknowledged work, balance fairness and throughput и avoid one worker hoarding slow messages.
Prefetch (`basic.qos`) ограничивает число неподтверждённых сообщений, которые канал отдаёт consumer. Низкий prefetch улучшает справедливость между конкурирующими worker; высокий повышает throughput при быстрых однородных обработчиках. Prefetch 1 типичен для долгих задач, чтобы один worker не накапливал медленные job.
Prefetch действует на канал, а не на соединение с несколькими consumer. Сочетайте prefetch с алертами по глубине очереди и autoscaling consumer. Без лимита один медленный consumer может держать много unacked сообщений и голодать соседей.
На интервью: объясните, почему prefetch 1 помогает честному распределению, когда его повышать и как unacked сообщения влияют на память брокера.
Типовые ошибки: высокий prefetch при медленных handler, блокирующих очередь; забытый prefetch у autoscale consumer; настройка без измерения разброса latency обработки.
Компромисс — гибкость против сложности: знайте, когда достаточно более простого пути.
Чеклист:
- Выберите prefetch по разбросу длительности handler.
- Мониторьте unacked на consumer.
- Согласуйте prefetch с сигналами autoscaling.
- Перенастраивайте при смене профиля нагрузки.