Рубрики
Без рубрики

Введение в Apache Pulsar

Узнайте больше о системе обмена сообщениями Apache Pulsar publish-subscribe

Автор оригинала: baeldung.

1. введение

Apache Pulsar – это распределенная система обмена сообщениями с открытым исходным кодом на основе публикации/подписки, разработанная в Yahoo .

Он был создан для питания критически важных приложений Yahoo, таких как Yahoo Mail, Yahoo Finance, Yahoo Sports и т. Д. Затем, в 2016 году, он был открыт в рамках Apache Software Foundation.

2. Архитектура

Pulsar-это мультитенантное, высокопроизводительное решение для обмена сообщениями между серверами . Он состоит из набора брокеров и букмекеров, а также встроенного Apache ZooKeeper для настройки и управления. Букмекеры из Apache BookKeeper , которые обеспечивают хранение сообщений до тех пор, пока они не будут потреблены.

В кластере мы будем иметь:

  • Несколько кластерных брокеров для обработки входящего сообщения от производителей и отправки сообщения потребителям
  • Apache BookKeeper для поддержки персистентности сообщений
  • Apache ZooKeeper для хранения конфигурации кластера

Чтобы лучше понять это, давайте взглянем на архитектурную схему из документации :

3. Основные характеристики

Давайте начнем с краткого обзора некоторых ключевых функций:

  • Встроенная поддержка нескольких кластеров
  • Поддержка георепликации сообщений в нескольких кластерах
  • Несколько моделей подписки
  • Масштабируемость до миллионов тем
  • Использует Apache BookKeeper для гарантии доставки сообщений.
  • Низкая задержка

Теперь давайте подробно обсудим некоторые ключевые особенности.

3.1. Модель обмена сообщениями

Фреймворк обеспечивает гибкую модель обмена сообщениями. В общем случае архитектура обмена сообщениями имеет две модели обмена сообщениями: очередь и издатель/подписчик. Издатель/Подписчик-это широковещательная система обмена сообщениями, в которой сообщение отправляется всем потребителям. С другой стороны, очередь-это коммуникация “точка-точка”.

Pulsar объединяет оба понятия в одном обобщенном API . Издатель публикует сообщения на разные темы. Затем эти сообщения транслируются во все подписки.

Потребители подписываются на получение сообщений. Библиотека позволяет потребителям выбирать различные способы использования сообщений в одной и той же подписке, включая эксклюзивную, общую и отказоустойчивую. Мы подробно обсудим эти типы подписки в последующих разделах.

3.2. Режимы развертывания

Pulsar имеет встроенную поддержку развертывания в различных средах . Это означает, что мы можем использовать его на стандартных локальных машинах или развернуть в кластере Kubernetes, облаке Google или AWS.

Он может быть выполнен как единый узел для целей разработки и тестирования. В этом случае все компоненты (брокер, бухгалтер и ZooKeeper) работают в одном процессе.

3.3. Георепликация

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

Данные сообщений реплицируются почти в реальном времени. В случае сбоя сети между кластерами данные всегда находятся в безопасности и хранятся в бухгалтерии. Система репликации продолжает повторять попытку до тех пор, пока репликация не будет успешной.

Функция георепликации также позволяет организации развертывать Pulsar между различными облачными провайдерами и реплицировать данные . Это помогает им избежать использования проприетарных API облачных провайдеров.

3.4. Постоянство

После того, как Pulsar считывает и подтверждает данные, он гарантирует отсутствие потери данных . Долговечность данных связана с количеством дисков, настроенных для хранения данных.

Pulsar обеспечивает долговечность за счет использования букмекеров (экземпляр Apache BookKeeper), работающих в узлах хранения. Всякий раз, когда букмекер получает сообщение, он сохраняет копию в памяти, а также записывает данные в WAL (Write Ahead Log). Этот журнал работает так же, как и база данных WAL. Букмекеры работают по принципу транзакций базы данных и гарантируют, что данные не будут потеряны даже в случае отказа машины.

Помимо вышеперечисленного, Pulsar также может выдерживать многократные отказы узлов. Библиотека реплицирует данные нескольким букмекерам, а затем отправляет сообщение подтверждения производителю. Этот механизм гарантирует нулевую потерю данных даже в случае многократных аппаратных сбоев.

4. Настройка Одного Узла

Теперь давайте посмотрим, как настроить один узел кластера Apache Pulsar.

Apache также предоставляет простой клиентский API с привязками для Java, Python и C++ . Позже мы создадим простой пример Java-производителя и подписки.

4.1. Установка

Apache Pulsar доступен в виде двоичного дистрибутива. Давайте начнем с его загрузки:

wget https://archive.apache.org/dist/incubator/pulsar/pulsar-2.1.1-incubating/apache-pulsar-2.1.1-incubating-bin.tar.gz

Когда загрузка будет завершена, мы сможем разархивировать zip-файл. Неархивированный дистрибутив будет содержать папки bin, conf, example, licenses и lib .

После этого нам нужно загрузить встроенные разъемы. Теперь они поставляются в виде отдельной упаковки:

wget https://archive.apache.org/dist/incubator/pulsar/pulsar-2.1.1-incubating/apache-pulsar-io-connectors-2.1.1-incubating-bin.tar.gz

Давайте разархивируем разъемы и скопируем папку Connectors в папку Pulsar.

4.2. Запуск экземпляра

Чтобы запустить автономный экземпляр, мы можем выполнить:

bin/pulsar standalone

5. Java-клиент

Теперь мы создадим проект Java для создания и потребления сообщений. Мы также создадим примеры для различных типов подписок.

5.1. Настройка проекта

Начнем с добавления в наш проект зависимости pulsar-client :


    org.apache.pulsar
    pulsar-client
    2.1.1-incubating

5.2. Производитель

Давайте продолжим, создав пример Producer . Здесь мы создадим тему и продюсера.

Во-первых, нам нужно создать клиент Pulsar, который будет подключаться к сервису Pulsar на определенном хосте и порту, используя свой собственный протокол. Многие производители и потребители могут совместно использовать один клиентский объект.

Теперь мы создадим Producer с конкретным названием темы:

private static final String SERVICE_URL = "pulsar://localhost:6650";
private static final String TOPIC_NAME = "test-topic";
PulsarClient client = PulsarClient.builder()
  .serviceUrl(SERVICE_URL)
  .build();

Producer producer = client.newProducer()
  .topic(TOPIC_NAME)
  .compressionType(CompressionType.LZ4)
  .create();

Продюсер отправит 5 сообщений:

IntStream.range(1, 5).forEach(i -> {
    String content = String.format("hi-pulsar-%d", i);

    Message msg = MessageBuilder.create()
      .setContent(content.getBytes())
      .build();
    MessageId msgId = producer.send(msg);
});

5.3. Потребитель

Затем мы создадим потребителя, чтобы получить сообщения, созданные производителем. Потребителю также требуется тот же Клиент Pulsar для подключения к нашему серверу:

Consumer consumer = client.newConsumer()
  .topic(TOPIC_NAME)
  .subscriptionType(SubscriptionType.Shared)
  .subscriptionName(SUBSCRIPTION_NAME)
  .subscribe();

Здесь мы создали клиент с типом подписки Shared . Это позволяет нескольким потребителям подключаться к одной и той же подписке и получать сообщения.

5.4. Виды подписки для Потребителя

В приведенном выше примере потребителя мы создали подписку с типом shared . Мы также можем создавать эксклюзивные и отказоустойчивые подписки.

Подписка exclusive позволяет подписаться только одному потребителю.

С другой стороны, подписка f ailover позволяет пользователю определить резервный потребитель в случае сбоя одного потребителя, как показано на этой диаграмме Apache:

6. Заключение

В этой статье мы выделили такие особенности системы обмена сообщениями Pulsar, как модель обмена сообщениями, георепликация и надежные гарантии долговечности.

Мы также узнали, как настроить один узел и как использовать Java-клиент.

Как всегда, полную реализацию этого учебника можно найти на Github .