Что такое Apache Pulsar?

Apache Pulsar — это распределенная система обмена сообщениями и потоковая платформа с открытым исходным кодом, разработанная Yahoo (теперь Verizon Media). Pulsar предназначен для обработки больших объемов данных в реальном времени с поддержкой multi-tenancy, geo-репликации и различных паттернов обмена сообщениями.

Основные возможности Apache Pulsar

  • Multi-tenancy — поддержка множественных арендаторов из коробки
  • Geo-репликация — синхронизация данных между географически распределенными кластерами
  • Низкая задержка — обработка сообщений с минимальными задержками
  • Высокая пропускная способность — миллионы сообщений в секунду
  • Durable storage — надежное хранение сообщений в Apache BookKeeper
  • Schema registry — встроенная поддержка схем данных

Архитектура Apache Pulsar

Pulsar имеет многоуровневую архитектуру:

  • Broker layer — обработка pub/sub операций
  • BookKeeper — распределенное хранилище логов
  • ZooKeeper — координация и метаданные кластера
  • Proxy layer — балансировка нагрузки и маршрутизация

Установка Apache Pulsar

Установка через Docker Compose:

 1version: '3.8'
 2services:
 3  pulsar:
 4    image: apachepulsar/pulsar:latest
 5    command: bin/pulsar standalone
 6    ports:
 7      - "6650:6650"   # Pulsar protocol
 8      - "8080:8080"   # HTTP admin
 9    environment:
10      - PULSAR_MEM=-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m

Установка Python клиента:

1# Установка через pip
2pip install pulsar-client
3
4# Установка через poetry
5poetry add pulsar-client

Основные концепции

Ключевые концепции Apache Pulsar:

  • Topic — именованный канал для передачи сообщений
  • Namespace — логическая группировка топиков
  • Tenant — изоляция ресурсов для разных организаций
  • Subscription — именованная конфигурация потребления
  • Partition — горизонтальное разделение топика

Работа с сообщениями

Пример producer на Python:

 1import pulsar
 2
 3# Создание клиента
 4client = pulsar.Client('pulsar://localhost:6650')
 5
 6# Создание producer
 7producer = client.create_producer('my-topic')
 8
 9# Отправка сообщения
10producer.send(('Hello Pulsar!').encode('utf-8'))
11
12# Закрытие соединений
13producer.close()
14client.close()

Пример consumer на Python:

 1import pulsar
 2
 3client = pulsar.Client('pulsar://localhost:6650')
 4
 5# Создание consumer
 6consumer = client.subscribe(
 7    'my-topic',
 8    subscription_name='my-subscription'
 9)
10
11# Получение сообщений
12while True:
13    msg = consumer.receive()
14    try:
15        print(f"Received: {msg.data().decode('utf-8')}")
16        consumer.acknowledge(msg)
17    except Exception as e:
18        consumer.negative_acknowledge(msg)

Типы подписок

Pulsar поддерживает различные типы подписок:

  • Exclusive — только один consumer на подписку
  • Shared — несколько consumer разделяют сообщения
  • Failover — один активный consumer, остальные в режиме ожидания
  • Key_Shared — сообщения с одинаковыми ключами идут к одному consumer

Сравнение с Apache Kafka

АспектPulsarKafka
АрхитектураМногоуровневаяМонолитная
ХранениеBookKeeperЛокальные диски
Multi-tenancyНативная поддержкаТребует настройки
Geo-репликацияВстроеннаяТребует MirrorMaker
Schema registryВстроенныйОтдельный компонент

Функции Pulsar

Pulsar Functions — это легковесная обработка данных:

 1# Пример функции на Python
 2def exclamation_function(input):
 3    return input + '!'
 4
 5# Развертывание функции
 6# bin/pulsar-admin functions create \
 7#   --py exclamation.py \
 8#   --classname exclamation_function \
 9#   --inputs input-topic \
10#   --output output-topic

Мониторинг и управление

Основные команды администрирования:

 1# Создание tenant
 2bin/pulsar-admin tenants create my-tenant
 3
 4# Создание namespace
 5bin/pulsar-admin namespaces create my-tenant/my-namespace
 6
 7# Список топиков
 8bin/pulsar-admin topics list my-tenant/my-namespace
 9
10# Статистика топика
11bin/pulsar-admin topics stats my-topic

Практические применения

Apache Pulsar идеально подходит для:

  • Обработки событий в реальном времени
  • Микросервисной архитектуры с async коммуникацией
  • IoT и телеметрических данных
  • Финансовых систем с требованиями к latency
  • Multi-tenant SaaS платформ
  • Geo-распределенных систем

FAQ

Когда выбирать Pulsar вместо Kafka?

Выбирай Pulsar, если тебе нужны multi-tenancy из коробки, geo-репликация, встроенный schema registry или более гибкая архитектура хранения.

Можно ли мигрировать с Kafka на Pulsar?

Да, Pulsar предоставляет Kafka-совместимый API и инструменты миграции, которые позволяют постепенно переносить приложения.

Насколько сложно администрировать Pulsar?

Pulsar требует больше компонентов чем Kafka, но предоставляет более мощные инструменты управления и мониторинга из коробки.