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


Исследователи из Nokia Bell Labs проанализировали относительные достоинства Apache Kafka и RabbitMQ, двух систем публикации / подписки с открытым исходным кодом и коммерческой поддержкой, чтобы сравнить их.

В публикации в разделе компьютерных наук библиотеки Корнельского университета исследователи Филипп Доббелаэр и Кюмарс Шейх Эсмаили предложили общую схему сравнения, охватывающую основные функции систем публикации и подписки, рассмотрели преимущества Kafka и RabbitMQ и изложили критерии того, как выбирайте между ними для разных обстоятельств. Вывод исследователей состоит в том, что у Kafka и RabbitMQ очень разные истории, цели дизайна и разные особенности.

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

RabbitMQ — это эффективная реализация протокола AMQP, который предлагает гибкий механизм маршрутизации с использованием понятий обмена / привязки. Это намного ближе к классическим системам обмена сообщениями. Например, он берет на себя большую часть учета потребления, его основная цель разработки — обработка сообщений в памяти, а его логика очереди оптимизирована для пустых или почти пустых очередей.

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

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

Что касается пропускной способности, в самой базовой настройке (то есть на одном узле, одном производителе / канале, одном разделе, без репликации) производительность RabbitMQ превосходит производительность Kafka. Однако увеличение количества разделов Kafka на том же узле может значительно улучшить его производительность, демонстрируя его превосходную масштабируемость. С другой стороны, увеличение количества производителей / каналов в RabbitMQ могло лишь умеренно улучшить его производительность.

И Kafka, и RabbitMQ могут масштабироваться дальше, разбивая строки на несколько узлов. В RabbitMQ для этого требуется дополнительная специальная логика, такая как Consistent Hash Exchange и Sharding Exchange. В Kafka это бесплатно. Наконец, репликация сильно влияет на производительность RabbitMQ и Kafka и снижает их производительность на 50% и 75% соответственно.

Вы можете прочитать полные выводы на сайте Корнельского университета.


Добавить комментарий