Брокеры сообщений - нюансы

Брокеры сообщений - нюансы

Владимир Ловцов | ИТ НАИЗНАНКУ

Пролог

Эту статью я пишу вслед за моей лекцией по типам интеграций и брокерам сообщений.

Брокер?

К сожалению или к счастью, но речь не биржевом брокере, а промежуточном(посредническом) программном обеспечении, которое обеспечивает передачу сообщений между различными компонентами приложения или между различными приложениями в распределенной системе. Брокер сообщений служит посредником для обмена данными, управляя отправкой, получением и маршрутизацией сообщений между отправителями и получателями.

Основные характеристики брокера сообщений:

  1. Очередь сообщений. Брокер сообщений может поддерживать очереди сообщений, где отправители помещают сообщения, а получатели извлекают их. Это обеспечивает асинхронную коммуникацию между компонентами системы.
  2. Темы и подписки. Некоторые брокеры сообщений поддерживают концепцию тем и подписок. Тема - это категория, в которой отправители размещают сообщения, а подписчики могут подписываться на темы, чтобы получать сообщения из них.
  3. Маршрутизация. Брокеры сообщений могут обеспечивать маршрутизацию сообщений, направляя их от отправителей к соответствующим получателям. Это может включать в себя фильтрацию, маршрутизацию на основе правил и другие механизмы.
  4. Гарантии доставки. Брокеры сообщений могут обеспечивать различные уровни гарантий доставки сообщений, такие как "at-least-once", "at-most-once" и "exactly-once", в зависимости от требований приложения.
  5. Отказоустойчивость.Некоторые брокеры поддерживают отказоустойчивость путем репликации данных и автоматического выбора лидера для обеспечения непрерывности работы даже при сбоях.

Чем отличаются друг от друга 3 классических брокера?

RabbitMQ

  1. Протокол: AMQP (Advanced Message Queuing Protocol).
  2. Модель сообщений: предоставляет модель очередей, где сообщения отправляются в очередь и затем потребляются одним или несколькими потребителями и прочтенное сообщение сгорает!
  3. Гарантии доставки: Поддерживает различные уровни гарантии доставки сообщений, такие как "at-most-once", "at-least-once" и "exactly-once".

Apache ActiveMQ

  1. Протокол: Он поддерживает несколько протоколов, включая OpenWire, AMQP, MQTT и другие.
  2. Модель сообщений: ActiveMQ также предоставляет модель очередей, а также темы (pub/sub), где сообщения могут быть опубликованы в тему и распределены всем подписчикам.
  3. Гарантии доставки: Обеспечивает гарантии доставки сообщений, такие как "at-least-once".

Apache Kafka

  1. Протокол: Собственный протокол Kafka.
  2. Модель сообщений: Kafka ориентирован на журнал, и сообщения хранятся в журнальном формате. Он предоставляет стриминговую платформу, поддерживающую как потоковую обработку, так и хранение данных.
  3. Гарантии доставки: Обеспечивает строгую упорядоченность и гарантии доставки "exactly-once". Кафка также поддерживает масштабируемость и устойчивость к отказам.

Гарантии доставки сообщений


  1. At-Most-Once (Не более одного раза), т.е. сообщение может быть доставлено, либо не доставлено, соответсвенно этом случае может произойти потеря сообщения, но дублирование не происходит.
  2. At-Least-Once (Не менее одного раза), т.е. гарантируется, что сообщение будет доставлено как минимум один раз, и это может привести к дублированию сообщений, но исключает потерю.
  3. Exactly-Once (Ровно один раз), т.е. гарантируется, что сообщение будет доставлено ровно один раз, без потерь или дублирования, соответсвенно, это самый строгий уровень гарантий.

Теперь предложу рассмотреть, как каждый из рассматриваемых брокеров сообщений реализует гарантии доставки:

RabbitMQ

  • Предоставляет гибкие уровни гарантий доставки с использованием подтверждений (acknowledgements - сокр. ack);
  • При использовании очередей, вы можете настроить, чтобы сообщения подтверждались только после успешной доставки (at-least-once).

Apache ActiveMQ

  • Предоставляет гибкие уровни гарантий доставки с использованием различных конфигураций подтверждений;
  • Можно настроить уровни доставки, такие как "at-least-once" и "exactly-once", в зависимости от требований.

Apache Kafka

  • Обеспечивает высокий уровень гарантий доставки благодаря своей модели лога;
  • Поддерживает строгую упорядоченность и предоставляет гарантии "at-least-once" и "exactly-once";
  • Может использоваться в сценариях, где требуется точная и надежная доставка данных.

Немного подробнее о Kafka и партициях


В Apache Kafka данные организованы в темы (topics), которые делятся на партиции (partitions). Партиции позволяют брокерам эффективно обрабатывать и хранить данные, а также обеспечивают горизонтальную масштабируемость и возможность распределения нагрузки.

Как работают партиции

  1. Распределение данных. Внутри topics данные разделяются на несколько partitions. Каждая партиция хранит упорядоченную последовательность сообщений.
  2. Горизонтальная масштабируемость. Партиции позволяют распределять данные по разным брокерам, что обеспечивает горизонтальную масштабируемость. Каждый брокер может быть ответственным за одну или несколько партиций.
  3. Обработка параллельно. Партиции позволяют брокерам обрабатывать данные параллельно. Различные партиции могут быть обработаны независимо друг от друга, что повышает производительность системы.
  4. Распределение нагрузки. Каждый брокер обрабатывает только часть данных, что позволяет равномерно распределять нагрузку между брокерами.

Лидер партиции и что это такое

  • В каждой партиции один из брокеров назначается лидером (leader), а остальные брокеры - репликами (replicas).
  • Лидер отвечает за чтение и запись данных в партицию, а реплики служат для обеспечения отказоустойчивости и высокой доступности.
  • Когда происходит запись сообщения в тему, она сначала записывается в лидера партиции, затем эта запись реплицируется на другие брокеры, чтобы обеспечить отказоустойчивость.
  • Если лидер брокера выходит из строя, одна из реплик автоматически выбирается в качестве нового лидера. Это происходит автоматически, и Kafka обеспечивает непрерывную работу системы даже при сбоях.

Более детально про партиции и работы кафки можно прочитать здесь -> ссылка (также тут будет изложена логика сегментов и лидеров партиций)

Почитать ещё можно следующие статьи:

  1. Apache Kafka: основы технологии
  2. Comparing Apache Kafka, ActiveMQ, and RabbitMQ

Канал - ИТ НАИЗНАНКУ

Report Page