Почему Apache Pulsar — это не Kafka с RabbitMQ в одном флаконе

курсы по Kafka, Apache Kafka обучение, Kafka Streams, обработка данных, большие данные, Big Data, архитектура, Kafka, Pulsar, Pulsar vs Kafka vs RabbitMQ

Недавно мы разбирали, что такое Apache Pulsar: архитектуру, принципы работы, сходства и различия с Kafka и RabbitMQ. В продолжение этого разговора, сегодня рассмотрим основные мифы и их опровержения в горячем споре о технологиях Big Data. Читайте далее про холивар Apache Kafka vs Pulsar vs RabbitMQ: что лучше выбрать для построения надежной системы потоковой аналитики больших данных и почему.

3 причины не сравнивать Apache Pulsar с Kafka и RabbitMQ

В real-time обработке больших данных и интеграции распределенных систем RabbitMQ считается самым популярным конкурентом Apache KafkaBig Data платформы потоковой передачи событий. Об этом мы подробно рассказывали здесь. Однако, RabbitMQ – далеко не единственная альтернатива Kafka. С 2019 года все большую известность получает новый проект Apache Software Foundation (ASF) – фреймворк Pulsar. Изначально разработанный в Yahoo! для собственных нужд корпорации, в 2016 году Pulsar получил статус open-source, а еще через 2 года – стал проектом фонда ASF высшего уровня.

Прежде всего поясним, что напрямую сравнивать эти 2 Big Data фреймворка не совсем корректно по следующим причинам [1]:

  • появившись в разное время, они отличаются степенью зрелости – Pulsar приобрел широкую известность и стал проектом верхнего уровня Apache Software Foundation только с 2018 года, а Kafka находится в этом статусе с 2012 года и успешно используется в качестве надежной распределенной платформы потоковой обработки событий, интеграционной шины и брокера сообщений;
  • несмотря open-source статус обоих систем под лицензией Apache0, Pulsar развивается, в основном, благодаря профессиональному сообществу энтузиастов, в то время как вокруг Kafka выросла целая инфраструктура на коммерческой поддержке, например, благодаря компании Confluent.

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

Наконец, по аналогии с вопросом Kafka vs Pulsar стоит подчеркнуть нерелевантность прямого сравнения c RabbitMQ, который представляет собой промежуточное open-source ПО для обмена сообщениями на основе стандарта AMQP для организации очередей с низкой задержкой. Поэтому скорость работы и пропускная способность этого фреймворка зависит от обмена сообщениями как на стороне производителя, так и на уровне очередей, связанных с ними на стороне потребителя [3]. С этим связан следующий миф о преимуществе Pulsar над Kafka и RabbitMQ, который мы рассмотрим далее.

Очереди сообщений vs потоки Big Data: объединить нельзя разделить

Мы уже упоминали, что Pulsar сочетает некоторые возможности Kafka и RabbitMQ, например, организацию очереди сообщений и потоковую передачу событий. Однако, в действительности реализовать оба этих направления на приемлемом уровне достаточно сложно из-за разницы самих архитектурных моделей. В частности, очереди сообщений (Message Queue, MQ) используются для точечной связи, обеспечивая асинхронное взаимодействие отправителя и получателя данных. В свою очередь, потоковая обработка событий предполагает обработку данных в режиме онлайн с минимальной временной задержкой в общении между их производителем (producer) и получателем (consumer).

Apache Pulsar имеет ограниченную поддержку очереди сообщений, т.к. в нем отсутствуют такие функции обмена данными, как транзакции, маршрутизация, фильтрация сообщений и прочие возможности, которые обычно присутствуют в типовых MQ-системах, например, IBM MQ, RabbitMQ и ActiveMQ. Даже MQ-адаптеры Pulsar не слишком помогают решить эту проблему из-за ряда функциональных ограничений. Таким образом, как и Kafka, Pulsar не полностью реализует MQ-концепцию. Поэтому если требуется готовое решение для непосредственного обмена сообщениями, его следует искать среди соответствующих брокеров: RabbitMQ, IBM MQ, RabbitMQ, ActiveMQ, NATS и другие аналоги.

С другой стороны, Pulsar также не 100% поддерживает потоковую обработку событий. К примеру, он не обеспечивает семантику строго однократной доставки сообщений (exactly-once), о которой мы рассказывали здесь.  Это существенно сокращает число вариантов использования Apache Pulsar в реальных Big Data системах. В частности, с этим фреймворком не получится реализовать обработку онлайн-платежей, т.к. при отсутствии exactly-once гарантии любой сбой может вызвать дублирование или потерю данных о финансовых проводках. Справедливости раи стоит отметить, что Pulsar предоставляет функцию дедупликации, которая гарантирует, что сообщение не будет сохранено в брокере дважды. Однако, это не мешает потребителю прочитать сообщение несколько раз, что не соответствует концепции exactly-once.

Кроме того, Pulsar предоставляет только некоторые элементарные функции для потоковой передачи, что подходит для простых обратных вызовов, но не становится полноценной онлайн-обработкой. Поэтому нельзя назвать Pulsar 100%-ной альтернативой возможностям Kafka Streams или KSQL для создания stateful-приложений, которые включают информацию о состоянии, скользящие окна и прочие идеи настоящей потоковой обработки Big Data. Примеры потоковой аналитики больших данных с Pulsar обычно используют его в сочетании с Apache Spark или Flink, что предполагает усложнение распределенной Big Data инфраструктуры.

Наконец, в отличие от транзакций в Kafka, в Pulsar невозможно точно привязать сообщения, зафиксированные к состоянию, записанному внутри потокового процессора. Таким образом, Pulsar не хватает функций потокового соединения, агрегирования, оконной обработки, отказоустойчивого управления состоянием и вычислений на основе времени событий. А обратной стороной гибкой многоуровневой архитектуры за счет BookKeeper является снижение функциональных возможностей топиков по сравнению с Kafka. Напомним, Apache BookKeeper изначально был задуман как журнал упреждающей записи для узла имен HDFS Hadoop в случае кратковременного хранения данных [2]. Об особенностях эксплуатации и администрирования Apache Pulsar в сравнении с Kafka мы поговорим в следующий раз.

В заключение отметим, что некорректность прямого сравнения Apache Pulsar с Kafka и RabbitMQ показывает бенчмаркинговый тест, проведенный компанией Confluent, в рамках которого не получилось оценить производительность всех 3-х фреймворков по одному сценарию из-за разных концепций работы с данными. В частности, RabbitMQ работает с устойчивой очередью, которая сохраняет сообщения на диск тогда и только тогда, когда сообщения еще не были использованы. В отличие от Kafka и Pulsar, RabbitMQ не поддерживает «перемотку» очередей для повторного чтения старых сообщений. Кроме того, RabbitMQ не предполагает разделов в топике, используя обмен для маршрутизации сообщений в связанные очереди с помощью атрибутов заголовка, ключей маршрутизации или привязок обмена, из которых потребители могут обрабатывать сообщения. Наконец, в случае RabbitMQ накладные расходы на репликацию данных серьезно снижают пропускную способность всей системы, т.к. этот фреймворк не предполагает неограниченного масштабирования. Все это сказалось на процессе бенчмаркингового тестирования и его результатах, которые в очередной раз показали первенство Apache Kafka по пропускной способности и скорости обработки данных, а также соотношению цена-качество (стоимость записанного байта) [3]. Впрочем, не стоит безоговорочно доверять этому тесту, о чем мы расскажем завтра.

Apache Pulsar, Kafka, RabbitMQ, Apache Pulsar vs Kafka vs RabbitMQ, производительность Big Data фреймворков
Apache Pulsar vs Kafka vs RabbitMQ — бенчмаркинговый тест производительности

Освоить на практике специфику администрирования кластеров и разработки Kafka-приложений для аналитики больших данных вы сможете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

 

 

Источники

  1. https://www.confluent.io/kafka-vs-pulsar/
  2. https://dzone.com/articles/pulsar-vs-kafka-comparison-and-myths-explored
  3. https://www.confluent.io/blog/kafka-fastest-messaging-system/