Анонс Kafka-on-Pulsar: добавление поддержки протокола Kafka в Apache Pulsar

Этот пост был опубликован в блогах StreamNative и OVHcloud, его соавторами являются Сиджи Го, Цзя Чжай и Пьер Земб. Спасибо Горацио Гонсалесу за иллюстрации!



Мы рады сообщить, что StreamNative и OVHcloud открывают исходный код «Kafka on Pulsar» (KoP). KoP обеспечивает поддержку протокола Apache Kafka в Apache Pulsar, вводя обработчик протокола Kafka на брокерах Pulsar. Добавив обработчик протокола KoP в существующий кластер Pulsar, вы теперь можете перенести существующие приложения и службы Kafka в Pulsar без изменения кода. Это позволяет приложениям Kafka использовать мощные функции Pulsar, такие как:

  • Оптимизация операций благодаря многопользовательской среде корпоративного уровня 
  • Упрощенные операции с архитектурой без ребалансировки 
  • Бесконечное хранение потока событий с помощью Apache BookKeeper и многоуровневого хранилища
  • Бессерверная обработка событий с помощью функций Pulsar

Что такое Apache Pulsar?

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

Необходимость КОП

Pulsar предоставляет унифицированную модель обмена сообщениями как для очередей, так и для потоковых рабочих нагрузок. Pulsar реализовал собственный двоичный протокол на основе protobuf, чтобы обеспечить высокую производительность и низкую задержку. Такой выбор protobuf делает удобным реализацию клиентов Pulsar, и проект уже поддерживает языки Java, Go, Python и C ++ наряду с сторонними клиентами, предоставляемыми сообществом. Однако существующие приложения, написанные с использованием других протоколов обмена сообщениями, пришлось переписать, чтобы принять новый унифицированный протокол обмена сообщениями Pulsar.

Для решения этой проблемы сообщество Pulsar разработало приложения, упрощающие переход на Pulsar с других систем обмена сообщениями. Например, Pulsar предоставляет оболочку Kafka для API Kafka Java, которая позволяет существующим приложениям, которые уже используют клиент Kafka Java, переключаться с Kafka на Pulsar без изменения кода. Pulsar также имеет богатую экосистему соединителей, соединяющую Pulsar с другими системами данных. Тем не менее, все еще существовал высокий спрос со стороны тех, кто хотел перейти с других приложений Kafka на Pulsar.

Сотрудничество StreamNative и OVHcloud

StreamNative получал много входящих запросов о помощи по переходу с других систем обмена сообщениями на Pulsar и осознавал необходимость поддержки других протоколов обмена сообщениями (таких как AMQP и Kafka) изначально на Pulsar. StreamNative начал работу над внедрением общей структуры обработчиков протоколов в Pulsar, которая позволила бы разработчикам, использующим другие протоколы обмена сообщениями, использовать Pulsar.

Внутри OVHcloud уже много лет работает Apache Kafka, но, несмотря на их опыт работы с несколькими кластерами с миллионами сообщений в секунду на Kafka, возникают болезненные проблемы при эксплуатации. Например, объединить тысячи тем от тысяч пользователей в один кластер без мультитенантности было сложно.

В результате OVHcloud решила сместить и построить основу своего продукта «тема как услуга» под названием ioStream на Pulsar вместо Kafka. Мультиарендность Pulsar и общая архитектура с Apache Bookkeeper упростили операции по сравнению с Kafka.

Создав первый регион, OVHcloud решила реализовать его в качестве прокси-сервера для проверки концепции, способного на лету преобразовывать протокол Kafka в Pulsar. В ходе этого процесса OVHcloud обнаружил, что StreamNative работает над внедрением протокола Kafka в Pulsar, и они объединили усилия для разработки KoP.



KoP был разработан, чтобы предоставить оптимизированное и комплексное решение, использующее инфраструктуру хранения потоков событий Pulsar и BookKeeper и структуру подключаемого обработчика протоколов Pulsar. KoP реализован как плагин обработчика протокола с именем протокола «kafka». Его можно установить и настроить для работы в составе брокеров Pulsar.

Распределенный журнал

И Pulsar, и Kafka используют очень похожую модель данных для журналов как для обмена сообщениями pub / sub, так и для потоковой передачи событий. Например, оба они построены поверх распределенного журнала. Ключевое различие между этими двумя системами заключается в том, как они реализуют распределенный журнал. Kafka реализует распределенный журнал в архитектуре на основе разделов, где распределенный журнал (раздел в Kafka) предназначен для хранения в наборе брокеров, в то время как Pulsar развертывает архитектуру на основе сегментов для реализации своего распределенного журнала, используя Apache BookKeeper как его масштабируемый уровень хранения сегментов. Архитектура Pulsar на основе * сегментов * обеспечивает такие преимущества, как отсутствие перебалансировки, мгновенная масштабируемость и неограниченное хранение потоков событий. Вы можете узнать больше о ключевых различиях между Pulsar и Kafka вэтот блог Splunk и в этом блоге проекта Bookkeeper.

Поскольку обе системы построены на схожей модели данных, распределенном журнале, очень просто реализовать обработчик протокола, совместимый с Kafka, используя распределенное хранилище журналов Pulsar и его подключаемую структуру обработчика протоколов (введенную в выпуске 2.5.0).

Реализации

Реализация осуществляется путем сравнения протоколов между Pulsar и Kafka. Мы обнаружили, что между этими двумя протоколами есть много общего. Оба протокола состоят из следующих операций:

  • Поиск темы : все клиенты подключаются к любому брокеру для поиска метаданных (то есть брокера-владельца) тем. После получения метаданных клиенты устанавливают постоянные TCP-соединения с брокерами-владельцами.
  • Производство : клиенты обращаются к брокеру- владельцу тематического раздела, чтобы добавить сообщения в распределенный журнал.
  • Потребление : клиенты обращаются к брокеру- владельцу раздела темы, чтобы прочитать сообщения из распределенного журнала.
  • Смещение : сообщения, создаваемые для тематического раздела, назначаются со смещением. Смещение в Pulsar называется MessageId. Потребители могут использовать смещения для поиска заданной позиции в журнале для чтения сообщений.
  • Состояние потребления : Обе системы поддерживают состояние потребления для потребителей в рамках подписки (или группы потребителей в Kafka). Состояние потребления хранится в теме __offsets в Kafka, а состояние потребления хранится в виде курсоров в Pulsar.

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

На следующем рисунке показано, как мы добавляем поддержку протокола Kafka в Pulsar. Мы представляем новый обработчик протоколов, который реализует проводной протокол Kafka, используя существующие компоненты (такие как обнаружение тем, распределенная библиотека журналов — ManagedLedger, курсоры и т. Д.), Которые уже есть в Pulsar.



Темы

В Kafka все темы хранятся в одном плоском пространстве имен. Но в Pulsar темы организованы в иерархические мультитенантные пространства имен. Мы вводим параметр kafkaNamespace в конфигурацию брокера, чтобы администратор мог отображать темы Kafka в темах Pulsar.

Чтобы пользователи Kafka могли использовать функцию мультитенантности Apache Pulsar, пользователь Kafka может указать клиент Pulsar и пространство имен в качестве своего имени пользователя SASL, когда он использует механизм аутентификации SASL для аутентификации клиента Kafka.

Идентификатор сообщения и смещение

В Kafka каждому сообщению присваивается смещение после его успешного создания в разделе темы. В Pulsar каждому сообщению присваивается «MessageID». Идентификатор сообщения состоит из 3 -х компонентов, главная книга-ID , начальные идентификаторы и пакетный индекс . Мы используем тот же подход в оболочке Pulsar-Kafka для преобразования Pulsar MessageID в смещение и наоборот.

Сообщения

И сообщение Kafka, и сообщение Pulsar имеют ключ, значение, временную метку и заголовки (примечание: в Pulsar это называется «свойствами»). Мы автоматически конвертируем эти поля между сообщениями Kafka и сообщениями Pulsar.

Поиск по теме

Мы используем тот же подход поиска тем для обработчика запросов Kafka, что и обработчик запросов Pulsar. Обработчик запросов выполняет обнаружение темы для поиска всех владений для запрошенных тематических разделов и отвечает информацией о владении как часть Kafka TopicMetadata обратно клиентам Kafka.

Создавать сообщения

Когда обработчик запросов Kafka получает созданные сообщения от клиента Kafka, он преобразует сообщения Kafka в сообщения Pulsar, сопоставляя поля (т.е. ключ, значение, временную метку и заголовки) одно за другим, и использует API добавления ManagedLedger для добавления этих преобразованных сообщений Pulsar. в BookKeeper. Преобразование сообщений Kafka в сообщения Pulsar позволяет существующим приложениям Pulsar использовать сообщения, созданные клиентами Kafka.

Потреблять сообщения

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

Координатор группы и управление взаимозачетами

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

Модель Пульсара сложно согласовать с моделью Кафки. Следовательно, для обеспечения полной совместимости с клиентами Kafka мы реализовали координатор группы Kafka, сохраняя изменения и смещения группы координаторов в системной теме под названием public / kafka / __ offsets в Pulsar.

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

Соедините две популярные экосистемы обмена сообщениями

В обеих компаниях мы ценим успех клиентов. Мы считаем, что предоставление собственного протокола Kafka на Apache Pulsar снизит барьеры для людей, использующих Pulsar для достижения успеха в бизнесе. Интегрируя две популярные экосистемы потоковой передачи событий, KoP открывает новые варианты использования. Клиенты могут использовать преимущества каждой экосистемы и создать действительно унифицированную платформу потоковой передачи событий с Apache Pulsar, чтобы ускорить разработку приложений и сервисов в реальном времени.

С помощью KoP сборщик журналов может продолжать собирать данные журналов из своих источников и отправлять сообщения в Apache Pulsar, используя существующие интеграции с Kafka. Последующие приложения могут использовать функции Pulsar для обработки событий, поступающих в систему, для выполнения бессерверной потоковой передачи событий.

Попробуй это

Исходный код KoP открыт под лицензией Apache License V2 по адресу https://github.com/streamnative/kop .

Мы с нетерпением ждем ваших вопросов и PR. Вы также можете присоединиться к каналу #kop в Pulsar Slack, чтобы обсудить все о Kafka-on-Pulsar.

StreamNative и OVHcloud также проводят веб-семинар по KoP 31 марта. Если вы хотите узнать больше о KoP, зарегистрируйтесь . С нетерпением жду встречи с вами онлайн.



Спасибо

Первоначально проект KoP был инициирован StreamNative. Команда OVHcloud присоединилась к проекту для совместной работы над проектом KoP. Большое спасибо Пьеру Зембу и Стивену Ле Ру из OVHcloud за их вклад в этот проект!