Апач Кафка

RabbitMQ против Apache Kafka

RabbitMQ против Apache Kafka
В этом посте мы попытаемся сравнить и установить некоторые различия в двух самых популярных брокерах сообщений, RabbitMQ и Apache Kafka.

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

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

Мы начнем с простого знакомства с этими инструментами.

Апач Кафка

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

Kafka Производитель и Потребитель

RabbitMQ

RabbitMQ - это более универсальный и простой в использовании брокер сообщений, который сам ведет запись о том, какие сообщения были получены клиентом, и сохраняет другое. Даже если по какой-то причине сервер RabbitMQ выходит из строя, вы можете быть уверены, что сообщения, которые в настоящее время находятся в очередях, были сохранены в файловой системе, так что, когда RabbitMQ снова вернется, эти сообщения могут обрабатываться потребителями согласованным образом.

RabbitMQ работает

Сверхдержава: Apache Kafka

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

Обратите внимание, что время, в течение которого это сообщение может быть перечитано, ограничено и может быть настроено в конфигурации Kafka. Итак, как только это время закончится, клиент больше не сможет прочитать старое сообщение.

Суперсила: RabbitMQ

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

  1. Прямой обмен: обмен темами один на один
  2. Обмен темами: A тема определяется, на котором различные производители могут публиковать сообщение, а различные потребители могут связывать себя для прослушивания по этой теме, поэтому каждый из них получает сообщение, которое отправляется в эту тему.
  3. Обмен Fanout: это более строгий, чем обмен темами, так как когда сообщение публикуется в обмене fanout, все потребители, которые подключены к очередям, которые связываются с обменом fanout, получат сообщение.

Уже заметил разницу между RabbitMQ и Kafka? Разница в том, что если потребитель не подключен к обмену фэнаутом в RabbitMQ, когда сообщение было опубликовано, оно будет потеряно, потому что другие потребители использовали сообщение, но этого не происходит в Apache Kafka, поскольку любой потребитель может прочитать любое сообщение. в виде они поддерживают свой собственный курсор.

RabbitMQ ориентирован на брокера

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

RabbitMQ использует самого брокера для управления состоянием сообщения и обеспечения доставки каждого сообщения каждому уполномоченному потребителю.

RabbitMQ предполагает, что потребители в основном онлайн.

Kafka ориентирован на производителя

Apache Kafka ориентирован на производителя, поскольку он полностью основан на разделении и потоке пакетов событий, содержащих данные, и их преобразовании в надежных брокеров сообщений с помощью курсоров, поддержки пакетных потребителей, которые могут быть в автономном режиме, или онлайн-потребителей, которым нужны сообщения с низкой задержкой.

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

Итак, Кафка не предполагают, что кто-то из его потребителей в основном в сети, и ему все равно.

Заказ сообщений

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

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

Заключение

В этом уроке мы изучили основные различия (а также сходства) между Apache Kafka и RabbitMQ. В некоторых средах оба показали исключительную производительность, например, RabbitMQ потребляет миллионы сообщений в секунду, а Kafka потребляет несколько миллионов сообщений в секунду. Основное архитектурное отличие состоит в том, что RabbitMQ управляет своими сообщениями почти в памяти и поэтому использует большой кластер (30+ узлов), тогда как Kafka фактически использует возможности последовательных операций дискового ввода-вывода и требует меньше оборудования.

Опять же, использование каждого из них по-прежнему полностью зависит от варианта использования в приложении. Счастливого обмена сообщениями !

Как использовать чит-движок GameConqueror в Linux
В статье содержится руководство по использованию чит-движка GameConqueror в Linux. Многие пользователи, играющие в игры на Windows, часто используют п...
Лучшие эмуляторы игровой консоли для Linux
В этой статье будет перечислено популярное программное обеспечение для эмуляции игровых консолей, доступное для Linux. Эмуляция - это уровень совмести...
Лучшие дистрибутивы Linux для игр в 2021 году
Операционная система Linux прошла долгий путь от своего первоначального простого серверного вида. Эта ОС значительно улучшилась за последние годы и те...