Очереди сообщений

15 вопросов

1 Зачем нужны очереди сообщений?

Асинхронная обработка: отправитель не ждет выполнения. Сглаживание пиков нагрузки, развязка сервисов, надежная доставка (сообщение сохраняется). Обработка в фоне: письма, нотификации, тяжелые задачи.

Открыть отдельно →
2 Что такое RabbitMQ? Основные понятия.

Брокер сообщений: producers публикуют в exchange, exchange маршрутизирует в очереди, consumers получают из очередей. Exchange types: direct, fanout, topic, headers. Очереди именованные, сообщения персистентные. Поддержка ack, nack, dead letter.

Открыть отдельно →
3 Типы Exchange в RabbitMQ?

Direct - по routing key (точное совпадение). Fanout - во все привязанные очереди. Topic - по шаблону ключа (wildcards). Headers - по заголовкам. Выбор зависит от маршрутизации.

Открыть отдельно →
4 Что такое ack и nack?

ack (acknowledge) - подтверждение успешной обработки; сообщение удаляется из очереди. nack - отказ; сообщение можно вернуть в очередь или в DLQ. Без ack при падении consumer сообщение не теряется (requeue). Предотвращает потерю при сбоях.

Открыть отдельно →
5 Как обеспечить надежную доставку?

Persistent сообщения и durable очереди; ack после обработки; idempotent consumer; при необходимости - подтверждение от подписчика (at-least-once). Retry с backoff и DLQ при повторных сбоях.

Открыть отдельно →
6 Что такое Kafka? Отличие от RabbitMQ.

Распределенный лог: сообщения хранятся в партициях топиков, с retention. Высокая пропускная способность, масштабирование потребителей через consumer groups. RabbitMQ - классическая очередь (очередь очереди); Kafka - лог, перечитание с offset. Kafka для событий и стриминга; RabbitMQ для задач и очередей.

Открыть отдельно →
7 Что такое топики и партиции в Kafka?

Topic - категория сообщений. Partition - упорядоченный лог внутри топика. Сообщения с одним ключом в одну партицию (порядок). Партиций несколько - параллелизм записи и чтения. Масштабирование топика - добавление партиций.

Открыть отдельно →
8 Что такое Consumer Group в Kafka?

Группа потребителей: каждая партиция топика обрабатывается одним consumer из группы. При добавлении/удалении consumer происходит rebalance. Параллелизм = число партиций. Offset хранится в Kafka (commit).

Открыть отдельно →
9 Отказоустойчивость в Kafka?

Репликация партиций (replication factor); лидер и replica; при падении лидера replica становится лидером. Consumer commit offset после обработки; при перезапуске чтение с последнего offset. Producer ack=all для гарантии записи в реплики.

Открыть отдельно →
10 Семантики доставки: at-most-once, at-least-once, exactly-once?

At-most-once - не более одного раза (возможна потеря). At-least-once - минимум один раз (возможны дубликаты при ретраях). Exactly-once - ровно один раз (транзакции, идемпотентность). В практике часто at-least-once + идемпотентный consumer.

Открыть отдельно →
11 Обработка ошибок в очередях?

Retry с ограничением попыток и backoff; при исчерпании - Dead Letter Queue (DLQ). Логирование и алерты. Идемпотентная обработка при дубликатах. Не блокировать очередь на "мертвых" сообщениях.

Открыть отдельно →
12 Что такое Dead Letter Queue?

Очередь для сообщений, которые не удалось обработать после N попыток. Анализ и ручная обработка или повторная публикация после исправления. Не терять сообщения и не блокировать основную очередь.

Открыть отдельно →
13 Идемпотентная обработка сообщений?

Повторная обработка того же сообщения не должна менять результат. Реализация: дедупликация по message id в БД; проверка "уже обработано" перед действием; идемпотентные операции на стороне внешних систем.

Открыть отдельно →
14 Pull vs Push модель доставки?

Pull (Kafka): consumer запрашивает батч сообщений. Контроль скорости у consumer, проще backpressure. Push (RabbitMQ): брокер шлет consumer. Меньше задержка, но нужен flow control. Выбор по сценарию.

Открыть отдельно →
15 Что такое consumer lag?

Разница между последним сообщением в партиции и текущим offset consumer. Рост lag - consumer не успевает. Мониторинг lag важен; при высоком lag - масштабировать consumers или оптимизировать обработку.

Открыть отдельно →
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.