200 вопросов по брокерам сообщений
200 вопросов по брокерам сообщений
Основы брокеров сообщений
Вопрос
Что такое брокер сообщений?
Ответ
Брокер сообщений — это промежуточное программное обеспечение, обеспечивающее асинхронную передачу данных между отправителями (продюсерами) и получателями (консюмерами) через очереди или топики.
Вопрос
Какова основная цель использования брокера сообщений?
Ответ
Основная цель — развязка компонентов распределённой системы, повышение отказоустойчивости, масштабируемости и гибкости взаимодействия между сервисами.
Вопрос
Что такое продюсер в контексте брокера сообщений?
Ответ
Продюсер — это компонент системы, который создаёт и отправляет сообщения в брокер.
Вопрос
Что такое консюмер в контексте брокера сообщений?
Ответ
Консюмер — это компонент системы, который получает и обрабатывает сообщения из брокера.
Вопрос
Что такое очередь сообщений?
Ответ
Очередь сообщений — это структура данных типа FIFO (First In, First Out), в которую продюсер помещает сообщения, а консюмер извлекает их по одному.
Вопрос
Что такое топик в системе обмена сообщениями?
Ответ
Топик — это канал публикации-подписки, в который продюсер публикует сообщения, а все подписанные консюмеры получают копию каждого сообщения.
Вопрос
В чём разница между моделью «очередь» и моделью «публикация-подписка»?
Ответ
В модели «очередь» каждое сообщение обрабатывается ровно одним консюмером. В модели «публикация-подписка» каждое сообщение доставляется всем подписанным консюмерам.
Вопрос
Что такое сообщение в контексте брокера?
Ответ
Сообщение — это единица данных, передаваемая через брокер, состоящая из заголовков (метаданных) и тела (полезной нагрузки).
Вопрос
Может ли одно и то же сообщение быть обработано несколькими консюмерами?
Ответ
Да, если сообщение отправлено в топик, а не в очередь. В очереди сообщение получает только один активный консюмер.
Вопрос
Что такое durable subscription?
Ответ
Durable subscription — это механизм, при котором подписка на топик сохраняется даже после отключения консюмера, и он получит все пропущенные сообщения при повторном подключении.
Вопрос
Что означает термин «асинхронная коммуникация»?
Ответ
Асинхронная коммуникация — это обмен данными, при котором отправитель не ждёт немедленного ответа от получателя и продолжает свою работу независимо.
Вопрос
Как брокер сообщений помогает при пиковых нагрузках?
Ответ
Брокер выступает как буфер: продюсеры могут продолжать отправлять сообщения даже при временной недоступности или перегрузке консюмеров.
Вопрос
Что такое backpressure в системах обмена сообщениями?
Ответ
Backpressure — это механизм регулирования потока сообщений от продюсера к консюмеру, предотвращающий переполнение брокера или консюмера.
Вопрос
Можно ли использовать брокер сообщений для синхронного взаимодействия?
Ответ
Да, с помощью шаблона Request-Reply: продюсер отправляет запрос в очередь и ожидает ответ из другой очереди, связанной с его уникальным идентификатором.
Вопрос
Что такое dead-letter queue (DLQ)?
Ответ
Dead-letter queue — это специальная очередь, в которую попадают сообщения, которые не удалось доставить или обработать после нескольких попыток.
Вопрос
Зачем нужна DLQ?
Ответ
DLQ позволяет сохранить проблемные сообщения для последующего анализа, исправления и повторной обработки без потери данных.
Вопрос
Что такое message TTL?
Ответ
Message TTL (Time To Live) — это параметр, задающий максимальное время, в течение которого сообщение может находиться в очереди или топике до автоматического удаления.
Вопрос
Что такое at-least-once delivery?
Ответ
At-least-once delivery — это гарантия доставки, при которой каждое сообщение будет доставлено получателю как минимум один раз, но возможны дубликаты.
Вопрос
Что такое at-most-once delivery?
Ответ
At-most-once delivery — это гарантия доставки, при которой каждое сообщение будет доставлено не более одного раза, но возможна потеря сообщений.
Вопрос
Что такое exactly-once delivery?
Ответ
Exactly-once delivery — это гарантия, при которой каждое сообщение обрабатывается ровно один раз, без дубликатов и потерь. Эта гарантия требует координации между брокером, продюсером и консюмером.
Архитектурные паттерны и модели доставки
Вопрос
Что такое Competing Consumers?
Ответ
Competing Consumers — это паттерн, при котором несколько консюмеров одновременно читают сообщения из одной очереди, обеспечивая масштабируемость и отказоустойчивость обработки.
Вопрос
Что такое Work Queue?
Ответ
Work Queue — это очередь, в которую продюсеры отправляют задачи, а один или несколько консюмеров извлекают и выполняют их, распределяя нагрузку между собой.
Вопрос
Что такое Fan-out?
Ответ
Fan-out — это паттерн публикации, при котором одно сообщение рассылается всем подписанным консюмерам через топик или exchange.
Вопрос
Что такое routing key в контексте брокера сообщений?
Ответ
Routing key — это строковый идентификатор, который продюсер присоединяет к сообщению, чтобы брокер определил, в какую очередь или топик направить это сообщение.
Вопрос
Что такое exchange в RabbitMQ?
Ответ
Exchange — это компонент RabbitMQ, который получает сообщения от продюсеров и направляет их в очереди на основе типа exchange и routing key.
Вопрос
Какие основные типы exchange существуют в RabbitMQ?
Ответ
Основные типы exchange в RabbitMQ:
- Direct — точное совпадение routing key;
- Fanout — рассылка во все привязанные очереди;
- Topic — маршрутизация по шаблону routing key;
- Headers — маршрутизация по заголовкам сообщения.
Вопрос
Что такое binding в RabbitMQ?
Ответ
Binding — это правило, связывающее exchange с очередью, определяющее, какие сообщения попадут в эту очередь.
Вопрос
Что такое partition в Apache Kafka?
Ответ
Partition — это упорядоченная, неизменяемая последовательность сообщений внутри топика Kafka, обеспечивающая параллельную обработку и масштабируемость.
Вопрос
Может ли один топик Kafka содержать несколько партиций?
Ответ
Да, топик Kafka может содержать любое количество партиций, заданное при создании или изменении топика.
Вопрос
Что такое offset в Kafka?
Ответ
Offset — это уникальный целочисленный идентификатор позиции сообщения внутри партиции Kafka.
Вопрос
Что такое consumer group в Kafka?
Ответ
Consumer group — это группа консюмеров, которые совместно потребляют сообщения из одного топика, причём каждая партиция назначается только одному консюмеру в группе.
Вопрос
Как Kafka обеспечивает порядок сообщений?
Ответ
Kafka гарантирует порядок сообщений только внутри одной партиции. Сообщения из разных партиций одного топика могут обрабатываться в произвольном порядке.
Вопрос
Что такое idempotent producer в Kafka?
Ответ
Idempotent producer — это продюсер Kafka, который гарантирует, что каждое сообщение будет записано в лог ровно один раз, даже при повторных отправках из-за сетевых ошибок.
Вопрос
Что такое message key в Kafka?
Ответ
Message key — это необязательное поле в сообщении Kafka, используемое для хеширования и определения целевой партиции при записи.
Вопрос
Зачем нужен message key?
Ответ
Message key позволяет гарантировать, что все сообщения с одинаковым ключом попадут в одну и ту же партицию, обеспечивая локальный порядок и согласованность.
Вопрос
Что такое prefetch count в RabbitMQ?
Ответ
Prefetch count — это параметр, ограничивающий количество неподтверждённых сообщений, которые брокер может отправить одному консюмеру одновременно.
Вопрос
Как работает механизм подтверждения сообщений (acknowledgement) в RabbitMQ?
Ответ
Консюмер отправляет ACK после успешной обработки сообщения. Только после получения ACK брокер удаляет сообщение из очереди. При отсутствии ACK сообщение может быть переотправлено другому консюмеру.
Вопрос
Что такое auto-ack в RabbitMQ?
Ответ
Auto-ack — это режим, при котором сообщение автоматически считается подтверждённым сразу после отправки консюмеру, без ожидания явного ACK.
Вопрос
Что такое durable queue?
Ответ
Durable queue — это очередь, метаданные которой сохраняются на диск и восстанавливаются после перезапуска брокера.
Вопрос
Что такое persistent message?
Ответ
Persistent message — это сообщение, помеченное флагом сохранения на диск, чтобы выжить после перезапуска брокера.
Надёжность, отказоустойчивость и обработка ошибок
Вопрос
Что такое message durability?
Ответ
Message durability — это свойство сообщения или очереди, при котором данные сохраняются на диск и не теряются при перезапуске брокера.
Вопрос
Как обеспечивается отказоустойчивость в RabbitMQ?
Ответ
Отказоустойчивость в RabbitMQ обеспечивается с помощью mirrored queues (зеркалированных очередей) или кворума (quorum queues), которые реплицируют данные между несколькими узлами кластера.
Вопрос
Что такое quorum queue в RabbitMQ?
Ответ
Quorum queue — это тип очереди в RabbitMQ, использующий алгоритм Raft для согласованной репликации данных между узлами и обеспечивающий строгую гарантию доставки и упорядоченности.
Вопрос
Что такое consumer failure?
Ответ
Consumer failure — это ситуация, когда консюмер завершает обработку сообщения с ошибкой или аварийно завершает работу до отправки подтверждения.
Вопрос
Как брокер реагирует на consumer failure?
Ответ
При consumer failure и отсутствии ACK брокер возвращает сообщение в очередь для повторной доставки другому консюмеру.
Вопрос
Что такое poison message?
Ответ
Poison message — это сообщение, которое вызывает постоянный сбой консюмера при каждой попытке обработки, приводя к бесконечному циклу повторных доставок.
Вопрос
Как предотвратить зацикливание из-за poison message?
Ответ
Для предотвращения зацикливания используется dead-letter queue: после заданного числа неудачных попыток сообщение перенаправляется в DLQ для анализа.
Вопрос
Что такое retry policy?
Ответ
Retry policy — это стратегия повторной отправки сообщения, включающая количество попыток, интервалы между ними и условия прекращения повторов.
Вопрос
Как Kafka обеспечивает отказоустойчивость?
Ответ
Kafka обеспечивает отказоустойчивость через репликацию партиций: каждая партиция имеет один лидер и несколько последователей (followers), которые синхронизируют данные.
Вопрос
Что такое ISR в Kafka?
Ответ
ISR (In-Sync Replicas) — это множество реплик партиции, которые полностью синхронизированы с лидером и могут стать новым лидером при его отказе.
Вопрос
Что такое unclean leader election в Kafka?
Ответ
Unclean leader election — это режим выбора нового лидера из несинхронизированных реплик, который может привести к потере данных, но повышает доступность.
Вопрос
Как Kafka гарантирует сохранность сообщений при сбое узла?
Ответ
Kafka сохраняет сообщения на диск и использует репликацию: пока хотя бы одна синхронизированная реплика жива, данные не теряются.
Вопрос
Что такое acks в Kafka?
Ответ
Acks — это параметр продюсера Kafka, определяющий, сколько реплик должно подтвердить получение сообщения, прежде чем оно считается успешно записанным.
Вопрос
Какие значения принимает параметр acks в Kafka?
Ответ
Параметр acks принимает три значения:
0— продюсер не ждёт подтверждения;1— подтверждение от лидера партиции;all(или-1) — подтверждение от всех синхронизированных реплик.
Вопрос
Что такое idempotent producer в контексте надёжности?
Ответ
Idempotent producer гарантирует, что каждое сообщение будет записано в лог ровно один раз, даже если сетевые ошибки вызывают повторные отправки.
Вопрос
Что такое transactional messaging в Kafka?
Ответ
Transactional messaging — это механизм Kafka, позволяющий атомарно записывать сообщения в несколько партиций и гарантировать exactly-once delivery при взаимодействии с внешними системами.
Вопрос
Какие компоненты участвуют в транзакциях Kafka?
Ответ
В транзакциях Kafka участвуют: транзакционный продюсер, транзакционный консюмер и координатор транзакций на стороне брокера.
Вопрос
Что такое fencing в контексте брокеров сообщений?
Ответ
Fencing — это механизм, предотвращающий одновременную активность нескольких экземпляров одного логического консюмера, например, при сетевых разделениях.
Вопрос
Как RabbitMQ обрабатывает потерю соединения с консюмером?
Ответ
RabbitMQ помечает недоставленные сообщения как «unacked» и возвращает их в очередь, если соединение с консюмером разорвано до получения ACK.
Вопрос
Что такое publisher confirms в RabbitMQ?
Ответ
Publisher confirms — это механизм, при котором брокер отправляет продюсеру подтверждение успешной записи сообщения в очередь, обеспечивая надёжную доставку от продюсера к брокеру.
Масштабирование и производительность
Вопрос
Как Kafka обеспечивает горизонтальное масштабирование?
Ответ
Kafka обеспечивает горизонтальное масштабирование за счёт разделения топиков на партиции, которые могут размещаться на разных брокерах кластера.
Вопрос
Можно ли добавить новые партиции в существующий топик Kafka?
Ответ
Да, можно увеличить количество партиций в существующем топике Kafka, но это может повлиять на порядок сообщений для некоторых ключей.
Вопрос
Как влияет количество партиций на производительность Kafka?
Ответ
Увеличение числа партиций повышает параллелизм потребления и пропускную способность, но чрезмерное количество может увеличить накладные расходы на управление метаданными.
Вопрос
Что такое throughput в контексте брокера сообщений?
Ответ
Throughput — это объём сообщений, который брокер может обработать за единицу времени, обычно измеряется в сообщениях в секунду или мегабайтах в секунду.
Вопрос
Какие факторы влияют на throughput Kafka?
Ответ
На throughput Kafka влияют: размер сообщений, количество партиций, скорость дисковой подсистемы, параметры репликации, настройки продюсера и консюмера.
Вопрос
Как RabbitMQ масштабируется горизонтально?
Ответ
RabbitMQ масштабируется горизонтально через кластеризацию: несколько узлов объединяются в кластер, а очереди могут быть реплицированы между ними.
Вопрос
Поддерживают ли обычные очереди RabbitMQ распределение по узлам кластера?
Ответ
Обычные классические очереди RabbitMQ привязаны к одному узлу кластера. Для распределённого хранения используются mirrored queues или quorum queues.
Вопрос
Что такое lazy queue в RabbitMQ?
Ответ
Lazy queue — это тип очереди RabbitMQ, которая сохраняет все сообщения на диск сразу после получения, минимизируя использование оперативной памяти и позволяя обрабатывать очень длинные очереди.
Вопрос
Когда следует использовать lazy queue?
Ответ
Lazy queue следует использовать при работе с большими объёмами сообщений, длительными задержками обработки или ограниченным объёмом оперативной памяти.
Вопрос
Как batch-обработка влияет на производительность продюсера Kafka?
Ответ
Batch-обработка увеличивает пропускную способность продюсера, так как несколько сообщений отправляются одним сетевым запросом, снижая накладные расходы.
Вопрос
Что такое linger.ms в Kafka?
Ответ
Linger.ms — это параметр продюсера Kafka, задающий максимальное время ожидания дополнительных сообщений для формирования пакета перед отправкой.
Вопрос
Как компрессия влияет на производительность Kafka?
Ответ
Компрессия снижает объём передаваемых и хранимых данных, экономит сетевой трафик и место на диске, но увеличивает нагрузку на CPU продюсера и консюмера.
Вопрос
Какие алгоритмы компрессии поддерживает Kafka?
Ответ
Kafka поддерживает алгоритмы компрессии: gzip, snappy, lz4 и zstd.
Вопрос
Что такое fetch.min.bytes в Kafka?
Ответ
Fetch.min.bytes — это параметр консюмера Kafka, задающий минимальный объём данных, который брокер должен накопить перед отправкой ответа консюмеру.
Вопрос
Как prefetch влияет на производительность консюмера RabbitMQ?
Ответ
Prefetch ограничивает количество неподтверждённых сообщений у консюмера, предотвращая его перегрузку и обеспечивая более равномерное распределение нагрузки между консюмерами.
Вопрос
Что такое memory pressure в RabbitMQ?
Ответ
Memory pressure — это состояние, при котором RabbitMQ исчерпывает доступную оперативную память и начинает блокировать продюсеров до освобождения ресурсов.
Вопрос
Как RabbitMQ реагирует на нехватку памяти?
Ответ
При нехватке памяти RabbitMQ активирует механизм flow control, временно приостанавливая продюсеров, чтобы предотвратить исчерпание ресурсов.
Вопрос
Что такое disk watermark в RabbitMQ?
Ответ
Disk watermark — это пороговое значение свободного места на диске, при достижении которого RabbitMQ блокирует продюсеров для предотвращения полного заполнения диска.
Вопрос
Как Kafka использует page cache для повышения производительности?
Ответ
Kafka читает и записывает данные через page cache ядра ОС, что позволяет избежать лишних копирований между пользовательским и ядерным пространством и ускоряет операции ввода-вывода.
Вопрос
Почему Kafka эффективно работает с последовательным чтением/записью?
Ответ
Kafka оптимизирован под последовательные операции ввода-вывода, которые быстрее случайных на большинстве типов носителей, особенно на HDD.
Конкретные реализации: Apache Kafka
Вопрос
Из каких основных компонентов состоит кластер Kafka?
Ответ
Кластер Kafka состоит из брокеров (brokers), контроллера (controller), ZooKeeper или KRaft (Kafka Raft Metadata mode), продюсеров и консюмеров.
Вопрос
Что такое broker в Kafka?
Ответ
Broker — это сервер Kafka, который хранит партиции топиков, обрабатывает запросы от продюсеров и консюмеров и участвует в репликации данных.
Вопрос
Что такое controller в Kafka?
Ответ
Controller — это специальный брокер в кластере Kafka, отвечающий за управление партициями, назначение лидеров и координацию изменений в кластере.
Вопрос
Как Kafka использует ZooKeeper?
Ответ
ZooKeeper используется Kafka для хранения метаданных кластера, координации брокеров, управления конфигурацией и выбора контроллера.
Вопрос
Что такое KRaft mode в Kafka?
Ответ
KRaft mode — это режим работы Kafka без ZooKeeper, в котором метаданные кластера управляются с помощью внутреннего протокола на основе Raft.
Вопрос
Какие преимущества даёт KRaft mode?
Ответ
KRaft mode упрощает архитектуру, снижает зависимость от внешних систем, повышает производительность метаданных и ускоряет запуск кластера.
Вопрос
Что такое log segment в Kafka?
Ответ
Log segment — это файл на диске, в который Kafka записывает последовательность сообщений из одной партиции. Один лог партиции состоит из нескольких сегментов.
Вопрос
Как Kafka управляет старыми сообщениями?
Ответ
Kafka использует политики удаления: по времени (retention.ms) или по объёму (retention.bytes), автоматически удаляя устаревшие сегменты лога.
Вопрос
Что такое log compaction в Kafka?
Ответ
Log compaction — это механизм Kafka, при котором из лога удаляются старые версии сообщений с одинаковым ключом, оставляя только самую свежую.
Вопрос
Для каких сценариев применяется log compaction?
Ответ
Log compaction применяется для хранения последнего состояния сущности по ключу, например, в changelog-потоках или материализованных представлениях.
Вопрос
Что такое Kafka Connect?
Ответ
Kafka Connect — это фреймворк для масштабируемого и надёжного импорта и экспорта данных между Kafka и внешними системами, такими как базы данных или файловые хранилища.
Вопрос
Что такое source connector в Kafka Connect?
Ответ
Source connector — это компонент Kafka Connect, который считывает данные из внешней системы и записывает их в топик Kafka.
Вопрос
Что такое sink connector в Kafka Connect?
Ответ
Sink connector — это компонент Kafka Connect, который считывает сообщения из топика Kafka и записывает их во внешнюю систему.
Вопрос
Что такое Kafka Streams?
Ответ
Kafka Streams — это клиентская библиотека для построения приложений потоковой обработки данных поверх Kafka без необходимости разворачивать отдельный кластер.
Вопрос
Как Kafka Streams обеспечивает состояние обработки?
Ответ
Kafka Streams использует state stores — локальные или удалённые хранилища состояний, резервируемые через changelog-топики Kafka.
Вопрос
Что такое KTable в Kafka Streams?
Ответ
KTable — это абстракция в Kafka Streams, представляющая изменяющееся состояние сущностей, где каждая запись обновляет значение по ключу.
Вопрос
Что такое KStream в Kafka Streams?
Ответ
KStream — это абстракция в Kafka Streams, представляющая неограниченный поток записей, где каждая запись обрабатывается независимо.
Вопрос
Как Kafka Streams обрабатывает оконные операции?
Ответ
Kafka Streams поддерживает различные типы окон: hopping, tumbling, session и sliding, позволяя агрегировать данные за заданные временные интервалы.
Вопрос
Что такое exactly-once semantics в Kafka Streams?
Ответ
Exactly-once semantics в Kafka Streams гарантирует, что каждое входное сообщение будет обработано ровно один раз, даже при сбоях и перезапусках.
Вопрос
Как Kafka Streams масштабируется?
Ответ
Kafka Streams масштабируется за счёт распределения задач обработки между несколькими экземплярами приложения, каждый из которых обрабатывает подмножество партиций входных топиков.
Конкретные реализации: RabbitMQ
Вопрос
Из каких основных компонентов состоит архитектура RabbitMQ?
Ответ
Архитектура RabbitMQ включает продюсеров, exchange, очереди, консюмеров, а также механизмы маршрутизации, подтверждения и управления соединениями.
Вопрос
Что такое virtual host в RabbitMQ?
Ответ
Virtual host — это логический изолятор ресурсов в RabbitMQ, содержащий собственные exchange, очереди и пользователей, аналогичный пространству имён.
Вопрос
Зачем нужны virtual hosts?
Ответ
Virtual hosts позволяют разделять среды (например, dev, test, prod) или клиентов в одном кластере RabbitMQ без конфликтов имён и с раздельными правами доступа.
Вопрос
Как создаётся очередь в RabbitMQ?
Ответ
Очередь создаётся либо явно через AMQP-команду queue.declare, либо автоматически при первом использовании, если разрешено автоматическое объявление.
Вопрос
Что такое exclusive queue в RabbitMQ?
Ответ
Exclusive queue — это очередь, доступная только одному соединению и автоматически удаляемая при его закрытии.
Вопрос
Что такое auto-delete queue в RabbitMQ?
Ответ
Auto-delete queue — это очередь, которая автоматически удаляется после того, как последний консюмер отписался от неё.
Вопрос
Как работает механизм binding в RabbitMQ?
Ответ
Binding связывает exchange с очередью по определённому routing key или шаблону, указывая, какие сообщения должны попадать в эту очередь.
Вопрос
Что такое alternate exchange?
Ответ
Alternate exchange — это резервный exchange, в который направляются сообщения, не найденные ни в одной привязанной очереди основного exchange.
Вопрос
Как RabbitMQ обрабатывает сообщения без подходящей привязки?
Ответ
Если сообщение не может быть маршрутизировано ни в одну очередь, оно либо отбрасывается, либо направляется в alternate exchange, если он настроен.
Вопрос
Что такое message priority в RabbitMQ?
Ответ
Message priority — это механизм, позволяющий назначить приоритет сообщению, чтобы оно обрабатывалось раньше других в рамках одной очереди.
Вопрос
Как включить поддержку приоритетов в очереди RabbitMQ?
Ответ
Поддержка приоритетов включается при объявлении очереди через аргумент x-max-priority, задающий максимальное значение приоритета.
Вопрос
Что такое shovel в RabbitMQ?
Ответ
Shovel — это плагин RabbitMQ, обеспечивающий надёжную передачу сообщений между разными брокерами или виртуальными хостами.
Вопрос
Что такое federation в RabbitMQ?
Ответ
Federation — это механизм распределения очередей и exchange между несколькими независимыми кластерами RabbitMQ, позволяющий создавать глобальные топологии.
Вопрос
Какие протоколы поддерживает RabbitMQ помимо AMQP 0.9.1?
Ответ
RabbitMQ поддерживает MQTT, STOMP, AMQP 1.0 и HTTP через соответствующие плагины.
Вопрос
Что такое management plugin в RabbitMQ?
Ответ
Management plugin — это веб-интерфейс RabbitMQ, предоставляющий мониторинг, управление очередями, exchange, подключениями и метриками через HTTP API.
Вопрос
Как RabbitMQ обеспечивает безопасность соединений?
Ответ
RabbitMQ поддерживает TLS/SSL для шифрования трафика, аутентификацию через встроенные или внешние системы (LDAP, OAuth2) и авторизацию на основе прав пользователей.
Вопрос
Что такое user tags в RabbitMQ?
Ответ
User tags — это роли пользователей в RabbitMQ (например, administrator, monitoring, policymaker), определяющие их права в веб-интерфейсе и API.
Вопрос
Как настраивается кластер RabbitMQ?
Ответ
Кластер RabbitMQ создаётся объединением нескольких узлов через общее имя кластера и синхронизацию cookie-файла, после чего узлы обнаруживают друг друга по сети.
Вопрос
Что такое disk node и RAM node в RabbitMQ?
Ответ
Disk node сохраняет метаданные на диск и может восстановиться после перезапуска. RAM node хранит метаданные только в памяти и требует хотя бы один disk node в кластере.
Вопрос
Как RabbitMQ обрабатывает сетевые разделения (network partitions)?
Ответ
При сетевом разделении RabbitMQ предлагает стратегии: ignore, pause-minority или autoheal, определяющие поведение узлов для предотвращения расхождения данных.
Сравнение брокеров: Kafka, RabbitMQ, ActiveMQ, Pulsar
Вопрос
В чём основное различие между Kafka и RabbitMQ?
Ответ
Kafka ориентирован на высокопроизводительную потоковую обработку с длительным хранением данных, а RabbitMQ — на гибкую маршрутизацию и надёжную доставку в традиционных системах обмена сообщениями.
Вопрос
Какой брокер лучше подходит для сценариев event sourcing?
Ответ
Apache Kafka лучше подходит для event sourcing благодаря неизменяемому логу, длительному хранению и поддержке повторного воспроизведения событий.
Вопрос
Какой брокер предпочтителен для сложной маршрутизации и enterprise-интеграции?
Ответ
RabbitMQ предпочтителен для сложной маршрутизации и enterprise-интеграции благодаря гибкой модели exchange, множеству протоколов и зрелой экосистеме.
Вопрос
Поддерживает ли ActiveMQ модель публикации-подписки?
Ответ
Да, ActiveMQ поддерживает как очереди (точка-точка), так и топики (публикация-подписка) через протоколы JMS, AMQP и MQTT.
Вопрос
Чем отличается Apache Pulsar от Kafka?
Ответ
Apache Pulsar разделяет вычисления и хранение: брокеры обрабатывают запросы, а данные хранятся в распределённой системе BookKeeper, что упрощает масштабирование и обеспечивает мультирегиональную репликацию «из коробки».
Вопрос
Какой брокер обеспечивает встроенную поддержку мультирегиональной репликации?
Ответ
Apache Pulsar обеспечивает встроенную поддержку мультирегиональной репликации на уровне топиков без дополнительных инструментов.
Вопрос
Какой брокер использует push-модель доставки сообщений?
Ответ
RabbitMQ использует push-модель: брокер активно отправляет сообщения консюмерам по мере их поступления.
Вопрос
Какой брокер использует pull-модель доставки сообщений?
Ответ
Apache Kafka использует pull-модель: консюмеры сами запрашивают сообщения из партиций по своему графику.
Вопрос
Какой брокер лучше масштабируется при увеличении числа топиков?
Ответ
Apache Pulsar лучше масштабируется при большом количестве топиков благодаря архитектуре с разделением вычислений и хранения.
Вопрос
Какой брокер проще в развёртывании и администрировании?
Ответ
RabbitMQ проще в развёртывании и администрировании для небольших и средних систем благодаря зрелому веб-интерфейсу и минимальным зависимостям.
Вопрос
Поддерживает ли Kafka транзакции между несколькими топиками?
Ответ
Да, Kafka поддерживает транзакции между несколькими партициями и топиками через механизм transactional messaging.
Вопрос
Поддерживает ли RabbitMQ транзакции?
Ответ
Да, RabbitMQ поддерживает AMQP-транзакции на уровне соединения, позволяя группировать несколько операций в одну атомарную единицу.
Вопрос
Какой брокер лучше подходит для IoT-сценариев?
Ответ
RabbitMQ и ActiveMQ лучше подходят для IoT-сценариев благодаря поддержке лёгковесных протоколов MQTT и STOMP.
Вопрос
Какой брокер обеспечивает более строгие гарантии порядка сообщений?
Ответ
Kafka обеспечивает строгий порядок внутри партиции, а RabbitMQ — порядок в рамках одной очереди при использовании одного консюмера или quorum queue.
Вопрос
Какой брокер имеет более низкую задержку при малых объёмах сообщений?
Ответ
RabbitMQ обычно демонстрирует более низкую задержку при малых объёмах сообщений благодаря push-модели и отсутствию пакетной обработки по умолчанию.
Вопрос
Какой брокер лучше подходит для аналитических потоковых задач?
Ответ
Kafka лучше подходит для аналитических потоковых задач благодаря интеграции с Kafka Streams, ksqlDB и экосистемой big data.
Вопрос
Поддерживает ли ActiveMQ кластеризацию?
Ответ
Да, ActiveMQ поддерживает кластеризацию через shared storage (например, базу данных или файловую систему) или репликацию на основе LevelDB/ZooKeeper.
Вопрос
Какой брокер предоставляет встроенные средства для обработки потоков?
Ответ
Kafka предоставляет встроенные средства для обработки потоков через Kafka Streams и ksqlDB.
Вопрос
Какой брокер чаще используется в микросервисных архитектурах?
Ответ
RabbitMQ и Kafka одинаково часто используются в микросервисных архитектурах: RabbitMQ — для команд и событий с немедленной обработкой, Kafka — для долгосрочного хранения событий и аналитики.
Вопрос
Какой брокер обеспечивает более простую модель exactly-once delivery?
Ответ
Kafka обеспечивает более простую и надёжную реализацию exactly-once delivery через идемпотентных продюсеров и транзакционные консюмеры.
Продвинутые сценарии и паттерны использования
Вопрос
Что такое Event Sourcing?
Ответ
Event Sourcing — это архитектурный паттерн, при котором состояние системы определяется последовательностью неизменяемых событий, сохраняемых в журнале.
Вопрос
Как брокер сообщений поддерживает Event Sourcing?
Ответ
Брокер сообщений, такой как Kafka, хранит события в упорядоченном логе, позволяя любому сервису воспроизвести историю и восстановить состояние.
Вопрос
Что такое CQRS?
Ответ
CQRS (Command Query Responsibility Segregation) — это паттерн разделения операций изменения состояния (команд) и операций чтения (запросов).
Вопрос
Как брокер сообщений интегрируется с CQRS?
Ответ
Команды отправляются через брокер на обработку, а результаты (события) публикуются для обновления материализованных представлений, используемых запросами.
Вопрос
Что такое Saga pattern?
Ответ
Saga pattern — это паттерн управления долгосрочными транзакциями в распределённых системах через последовательность локальных транзакций и компенсирующих действий.
Вопрос
Как брокер сообщений используется в Saga pattern?
Ответ
Каждый шаг Saga публикует событие в брокер, которое инициирует следующий шаг или компенсирующее действие при ошибке.
Вопрос
Что такое Outbox pattern?
Ответ
Outbox pattern — это механизм обеспечения согласованности между базой данных и брокером сообщений путём записи событий в специальную таблицу (outbox) в той же транзакции, что и изменение данных.
Вопрос
Как работает Outbox pattern?
Ответ
После фиксации транзакции фоновый процесс или триггер читает события из таблицы outbox и отправляет их в брокер сообщений.
Вопрос
Что такое Inbox pattern?
Ответ
Inbox pattern — это механизм дедупликации входящих сообщений путём сохранения идентификаторов обработанных сообщений в базе данных.
Вопрос
Как Inbox pattern предотвращает дублирование?
Ответ
Перед обработкой сообщения система проверяет его идентификатор в таблице inbox; если запись существует, сообщение игнорируется.
Вопрос
Что такое idempotency key?
Ответ
Idempotency key — это уникальный идентификатор запроса, который позволяет консюмеру безопасно обрабатывать одно и то же сообщение несколько раз без побочных эффектов.
Вопрос
Как реализуется идемпотентность на стороне консюмера?
Ответ
Консюмер сохраняет идентификаторы обработанных сообщений и пропускает повторные сообщения с теми же идентификаторами.
Вопрос
Что такое distributed tracing в контексте брокеров сообщений?
Ответ
Distributed tracing — это метод отслеживания запроса через микросервисы, включая передачу trace ID через заголовки сообщений в брокере.
Вопрос
Как передавать trace context через Kafka?
Ответ
Trace context передаётся через заголовки сообщений Kafka, которые поддерживают произвольные пары ключ-значение.
Вопрос
Что такое message enrichment?
Ответ
Message enrichment — это процесс добавления дополнительных метаданных или контекста к сообщению перед отправкой или после получения.
Вопрос
Где обычно происходит message enrichment?
Ответ
Message enrichment происходит либо на стороне продюсера (до отправки), либо в промежуточном компоненте (например, Kafka Streams или RabbitMQ shovel).
Вопрос
Что такое dead-letter processing pipeline?
Ответ
Dead-letter processing pipeline — это автоматизированный процесс анализа, исправления и повторной отправки сообщений из DLQ в основную очередь.
Вопрос
Как организовать retry с экспоненциальной задержкой?
Ответ
Retry с экспоненциальной задержкой организуется через временную очередь с TTL или через внешний планировщик, который повторно отправляет сообщение через увеличивающиеся интервалы.
Вопрос
Что такое poison pill в контексте очередей?
Ответ
Poison pill — это специально созданное сообщение, которое сигнализирует консюмеру о необходимости завершить обработку или выполнить специальную логику.
Вопрос
Как использовать брокер для broadcast-уведомлений?
Ответ
Для broadcast-уведомлений используется топик с моделью публикации-подписки: все подписанные консюмеры получают копию сообщения.
Проектирование систем и лучшие практики
Вопрос
Как выбрать между очередью и топиком при проектировании системы?
Ответ
Очередь выбирается, когда задача должна быть обработана ровно одним потребителем. Топик выбирается, когда одно событие должно быть получено всеми заинтересованными сторонами.
Вопрос
Когда следует использовать несколько топиков вместо одного?
Ответ
Несколько топиков используются при различии в сроках хранения, пропускной способности, потребителях или семантике данных, чтобы изолировать потоки и упростить управление.
Вопрос
Какой размер сообщения считается оптимальным для Kafka?
Ответ
Оптимальный размер сообщения в Kafka — от нескольких сотен байт до нескольких килобайт. Очень большие сообщения (>1 МБ) снижают производительность и увеличивают нагрузку на сеть и диск.
Вопрос
Как обрабатывать очень большие полезные нагрузки в системах обмена сообщениями?
Ответ
Очень большие полезные нагрузки выносятся во внешнее хранилище (например, S3, MinIO), а в сообщении передаётся только ссылка на объект.
Вопрос
Зачем использовать идемпотентность даже при at-least-once delivery?
Ответ
Идемпотентность гарантирует корректность обработки при дубликатах, которые неизбежны при at-least-once delivery из-за повторных отправок после сбоев.
Вопрос
Как обеспечить согласованность между несколькими очередями?
Ответ
Согласованность между очередями обеспечивается через паттерны Outbox/Inbox, транзакционные продюсеры (Kafka) или координацию через распределённый журнал событий.
Вопрос
Следует ли использовать один топик Kafka для всех событий системы?
Ответ
Нет, следует разделять события по доменным границам, частоте, объёму и сроку хранения, чтобы обеспечить масштабируемость, безопасность и удобство управления.
Вопрос
Как избежать «горячих» партиций в Kafka?
Ответ
Горячие партиции избегаются равномерным распределением ключей, использованием соли в ключе или отказом от ключа при отсутствии необходимости в порядке.
Вопрос
Почему важно ограничивать права доступа консюмеров и продюсеров?
Ответ
Ограничение прав предотвращает несанкционированную запись или чтение, повышает безопасность и снижает риск ошибок из-за случайного взаимодействия с чужими очередями.
Вопрос
Как тестировать отказоустойчивость системы на основе брокера?
Ответ
Отказоустойчивость тестируется методами chaos engineering: принудительное отключение узлов, имитация сетевых задержек, отказ дисков и проверка восстановления после сбоев.
Вопрос
Как документировать топики и очереди в проекте?
Ответ
Топики и очереди документируются в виде контрактов: название, назначение, формат сообщения (схема), TTL, политика хранения, список продюсеров и консюмеров.
Вопрос
Следует ли версионировать сообщения?
Ответ
Да, сообщения следует версионировать через поля в заголовках или теле, чтобы обеспечить обратную совместимость при эволюции схемы.
Вопрос
Как управлять схемой сообщений в Kafka?
Ответ
Схема сообщений в Kafka управляется через Schema Registry (например, Confluent Schema Registry), который хранит и проверяет Avro-, Protobuf- или JSON-схемы.
Вопрос
Почему важно контролировать число consumer groups?
Ответ
Каждая consumer group создаёт собственное состояние смещений и может увеличивать нагрузку на брокер; их число следует ограничивать реальными сценариями потребления.
Вопрос
Как избежать лавинообразного отказа при сбое консюмера?
Ответ
Лавинообразный отказ предотвращается через circuit breaker, retry с экспоненциальной задержкой, DLQ и мониторинг ConsumerLag.
Вопрос
Когда стоит выбирать Kafka вместо базы данных для хранения событий?
Ответ
Kafka выбирается, когда требуется высокая пропускная способность, параллельное потребление, повторное воспроизведение и интеграция с потоковой обработкой.
Вопрос
Как обеспечить соответствие требованиям регуляторов (например, GDPR) при использовании брокеров?
Ответ
Соответствие обеспечивается через шифрование данных, аудит доступа, возможность удаления сообщений по ключу (log compaction) и настройку коротких сроков хранения.
Вопрос
Можно ли использовать брокер как основное хранилище состояния?
Ответ
Брокер может использоваться как основное хранилище состояния только в паттернах Event Sourcing с гарантией долговременного хранения и надёжной репликации.
Вопрос
Какие анти-паттерны следует избегать при работе с брокерами?
Ответ
Следует избегать: использования брокера для синхронных вызовов без таймаутов, отправки огромных сообщений, отсутствия DLQ, игнорирования мониторинга и отсутствия идемпотентности.
Вопрос
Как оценивать готовность команды к эксплуатации брокера в продакшене?
Ответ
Готовность оценивается по наличию: процедур мониторинга и алертинга, документированных сценариев восстановления, автоматизированного развёртывания, тестов отказоустойчивости и понимания гарантий доставки.