Порівняння провідних платформ обміну повідомленнями

Apache Kafka та RabbitMQ — це два широко використовувані брокери обміну повідомленнями, які дозволяють відокремити обмін повідомленнями між програмами. Які їхні найважливіші характеристики і чим вони відрізняються один від одного? Перейдемо до понять.

RabbitMQ

RabbitMQ — це програма-брокер із відкритим вихідним кодом для спілкування та обміну повідомленнями між сторонами. Оскільки він був розроблений в Erlang, він дуже легкий і ефективний. Мова Erlang була розроблена Ericson з акцентом на розподілених системах.

Він вважається більш традиційним посередником обміну повідомленнями. Він заснований на шаблоні видавець-передплатник, хоча може обробляти зв’язок синхронно або асинхронно, залежно від того, що встановлено в конфігурації. Він також забезпечує доставку та замовлення повідомлень між виробниками та споживачами.

Він підтримує протоколи AMQP, STOMP, MQTT, HTTP та веб-сокетів. Три моделі обміну повідомленнями: за темою, фанаут і прямий:

  • Прямий та індивідуальний обмін за темою чи темою [topic]
  • Усі споживачі, підключені до черги, отримують [fanout] повідомлення
  • Кожен споживач отримує надіслане повідомлення [direct]

Нижче наведено компоненти RabbitMQ:

Виробники

Виробники — це програми, які створюють і надсилають повідомлення в RabbitMQ. Це може бути будь-яка програма, яка може підключатися до RabbitMQ і публікувати повідомлення.

Споживачі

Споживачі — це програми, які отримують і обробляють повідомлення від RabbitMQ. Це може бути будь-яка програма, яка може підключитися до RabbitMQ і підписатися на повідомлення.

Обміни

Біржі відповідають за отримання повідомлень від виробників і маршрутизацію їх у відповідні черги. Існує кілька типів обміну, включаючи прямий обмін, обмін розгалуженням, обмін темами та заголовками, кожен із яких має власні правила маршрутизації.

Черги

Черги – це місце, де зберігаються повідомлення, доки їх не споживають споживачі. Вони створюються програмами або автоматично RabbitMQ, коли повідомлення публікується на біржі.

Палітурки

Прив’язки визначають зв’язок між обмінами та чергами. Вони визначають правила маршрутизації повідомлень, які використовуються біржами для маршрутизації повідомлень у відповідні черги.

Архітектура RabbitMQ

RabbitMQ використовує модель вилучення для доставки повідомлень. У цій моделі споживачі активно запитують повідомлення брокера. Повідомлення публікуються на біржах, відповідальних за маршрутизацію повідомлень у відповідні черги на основі ключів маршрутизації.

Архітектура RabbitMQ базується на архітектурі клієнт-сервер і складається з кількох компонентів, які працюють разом, щоб забезпечити надійну та масштабовану платформу обміну повідомленнями. Концепція AMQP передбачає компоненти Exchanges, Queues, Bindings, а також Publishers і Subscribers. Видавці публікують повідомлення на біржах.

Обміни приймають ці повідомлення та розподіляють їх у черги від 0 до n на основі певних правил (прив’язок). Повідомлення, що зберігаються в чергах, потім можуть бути отримані споживачами. У спрощеному вигляді керування повідомленнями здійснюється в RabbitMQ наступним чином:

Джерело зображення: VMware

  • Видавці надсилають повідомлення для обміну;
  • Exchange надсилає повідомлення в черги та інші обмінники;
  • Коли повідомлення отримано, RabbitMQ надсилає підтвердження відправникам;
  • Споживачі підтримують постійні TCP-з’єднання з RabbitMQ і оголошують, яку чергу вони отримують;
  • RabbitMQ направляє повідомлення споживачам;
  • Споживачі надсилають підтвердження успіху або помилки отримання повідомлення;
  • При успішному отриманні повідомлення видаляється з черги.

Апач Кафка

Apache Kafka — це розподілене рішення для обміну повідомленнями з відкритим кодом, розроблене LinkedIn у Scala. Він здатний обробляти повідомлення та зберігати їх за допомогою моделі видавець-передплатник із високою масштабованістю та продуктивністю.

  Як відключити жорсткі диски в Ubuntu

Щоб зберігати отримані події або повідомлення, розподіліть теми між вузлами за допомогою розділів. Він поєднує шаблони видавець-передплатник і черги повідомлень, а також відповідає за забезпечення порядку повідомлень для кожного споживача.

Kafka спеціалізується на високій пропускній здатності даних і низькій затримці для обробки потоків даних у реальному часі. Це досягається уникненням надто великої логіки на стороні сервера (брокера), а також деяких спеціальних деталей реалізації.

Наприклад, Kafka взагалі не використовує оперативну пам’ять і відразу записує дані у файлову систему сервера. Оскільки всі дані записуються послідовно, досягається продуктивність читання та запису, яка порівнянна з оперативною пам’яттю.

Ось основні концепції Kafka, які роблять його масштабованим, продуктивним і стійким до відмов:

Тема

Тема — це спосіб позначення або категоризації повідомлення; уявіть собі шафу з 10 ящиками; кожна шухляда може бути темою, а шафа — це платформа Apache Kafka, тож окрім категоризації групових повідомлень, у реляційних базах даних може бути ще одна краща аналогія щодо теми.

Продюсер

Виробник або продюсер – це той, хто підключається до платформи обміну повідомленнями та надсилає одне або кілька повідомлень на певну тему.

Споживач

Споживач — це особа, яка підключається до платформи обміну повідомленнями та отримує одне або кілька повідомлень на певну тему.

Брокер

Концепція брокера на платформі Kafka – це не що інше, як практично сам Кафка, і він є тим, хто керує темами та визначає спосіб зберігання повідомлень, журналів тощо.

Кластер

Кластер — це набір посередників, які взаємодіють між собою чи ні для кращої масштабованості та відмовостійкості.

Файл журналу

Кожна тема зберігає свої записи у форматі журналу, тобто структуровано та послідовно; таким чином, файл журналу – це файл, який містить інформацію про тему.

Перегородки

Розділи — це рівень розділення повідомлень у темі; це розділення забезпечує еластичність, відмовостійкість і масштабованість Apache Kafka, так що кожна тема може мати кілька розділів у різних місцях.

Архітектура Апача Кафки

Kafka базується на моделі push для доставки повідомлень. Використовуючи цю модель, повідомлення в Kafka активно надсилаються споживачам. Повідомлення публікуються в темах, які розділені та розподілені між різними брокерами в кластері.

Потім споживачі можуть підписатися на одну або кілька тем і отримувати повідомлення, щойно вони створюються на ці теми.

У Кафки кожна тема поділена на один або кілька розділів. Саме в перегородці події закінчуються.

Якщо в кластері більше одного брокера, то розділи будуть розподілені рівномірно по всіх брокерах (наскільки це можливо), що дозволить масштабувати навантаження по написанню і читанню в одній темі відразу на кілька брокерів. Оскільки це кластер, він працює за допомогою ZooKeeper для синхронізації.

Він отримує магазини і розповсюджує записи. Запис — це дані, створені деяким вузлом системи, які можуть бути подією або інформацією. Він надсилається в кластер, а кластер зберігає його в розділі теми.

Кожен запис має зсув послідовності, і споживач може контролювати зсув, який він споживає. Таким чином, якщо є необхідність повторно опрацювати тему, це можна зробити на основі заліку.

  10 зручних інструментів для перетворення JSON на Excel

Джерело зображення: Вікіпедія

Логіка, така як керування ідентифікатором останнього прочитаного повідомлення споживача або рішення про те, до якого розділу записуються дані, що надходять, повністю переходить до клієнта (виробника чи споживача).

Крім понять виробника і споживача існують також поняття топіка, розбиття і тиражування.

Тема описує категорію повідомлень. Kafka досягає відмовостійкості шляхом реплікації даних у темі та масштабування шляхом розділення теми на кілька серверів.

RabbitMQ проти Кафки

Основні відмінності між Apache Kafka і RabbitMQ пов’язані з принципово різними моделями доставки повідомлень, реалізованими в цих системах.

Зокрема, Apache Kafka працює за принципом витягування (pulling), коли споживачі самі отримують потрібні їм повідомлення з теми.

RabbitMQ, з іншого боку, реалізує модель push, надсилаючи необхідні повідомлення одержувачам. Таким чином, Kafka відрізняється від RabbitMQ наступним чином:

#1. Архітектура

Однією з найбільших відмінностей між RabbitMQ і Kafka є різниця в архітектурі. RabbitMQ використовує традиційну архітектуру черги повідомлень на основі брокера, тоді як Kafka використовує архітектуру розподіленої потокової платформи.

Крім того, RabbitMQ використовує модель доставки повідомлень на основі вилучення, тоді як Kafka використовує модель на основі push.

#2. Збереження повідомлень

RabbitMQ розміщує повідомлення в черзі FIFO (First Input – First Output) і відстежує стан цього повідомлення в черзі, а Kafka додає повідомлення до журналу (записує на диск), залишаючи одержувачу піклуватися про отримання необхідних інформація з теми.

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

Таким чином, Kafka зберігає поточний і всі попередні стани системи і може використовуватися як надійне джерело історичних даних, на відміну від RabbitMQ.

#3. Балансування навантаження

Завдяки моделі доставки повідомлень RabbitMQ зменшує затримку. Однак одержувачі можуть переповнюватися, якщо повідомлення надходять до черги швидше, ніж вони можуть їх обробити.

Оскільки в RabbitMQ кожен отримувач запитує/завантажує різну кількість повідомлень, розподіл роботи може стати нерівномірним, що призведе до затримок і втрати порядку повідомлень під час обробки.

Щоб запобігти цьому, кожен приймач RabbitMQ налаштовує ліміт попередньої вибірки, обмеження на кількість накопичених непідтверджених повідомлень. У Kafka балансування навантаження виконується автоматично шляхом перерозподілу одержувачів між розділами (розділами) теми.

#4. Маршрутизація

RabbitMQ містить чотири способи маршрутизації до різних бірж для постановки в чергу, що забезпечує потужний і гнучкий набір шаблонів обміну повідомленнями. Kafka реалізує лише один спосіб запису повідомлень на диск без маршрутизації.

#5. Упорядкування повідомлень

RabbitMQ дозволяє підтримувати відносний порядок у довільних наборах (групах) подій, а Apache Kafka забезпечує простий спосіб підтримувати порядок із масштабованістю, записуючи повідомлення послідовно до реплікованого журналу (теми).

FeatureRabbitMQKafka ArchitectureЗберігає повідомлення на диску, підключеному до брокера.Розподілена архітектура потокової платформи.Модель доставки. На основі Pull. На основі Push. Збереження повідомлень. Неможливо зберігати повідомлення. Зберігає замовлення, записуючи в тему. Балансування навантаження. Налаштовує ліміт попередньої вибірки. Виконується автоматично. Маршрут. Включає 4 способи маршрутизації. Має лише 1 спосіб маршрутизації. до теми Зовнішні процесиНе потребує Вимагає запуску екземпляра Zookeeper ПлагіниКілька плагінівМає обмежену підтримку плагінів

  Як завантажити кілька файлів у Dropbox одночасно за допомогою iPhone або iPad

RabbitMQ і Kafka є широко використовуваними системами обміну повідомленнями, кожна зі своїми сильними сторонами та варіантами використання. RabbitMQ — це гнучка, надійна та масштабована система обміну повідомленнями, яка чудово справляється з чергою повідомлень, що робить її ідеальним вибором для програм, які потребують надійної та гнучкої доставки повідомлень.

З іншого боку, Kafka — це розподілена потокова платформа, розроблена для високопродуктивної обробки великих обсягів даних у реальному часі, що робить її чудовим вибором для додатків, які потребують обробки та аналізу даних у реальному часі.

Основні варіанти використання RabbitMQ:

Електронна комерція

RabbitMQ використовується в програмах електронної комерції для керування потоком даних між різними системами, такими як управління запасами, обробка замовлень і обробка платежів. Він може обробляти великі обсяги повідомлень і гарантувати, що вони доставлені надійно та в правильному порядку.

Охорона здоров’я

У галузі охорони здоров’я RabbitMQ використовується для обміну даними між різними системами, такими як електронні медичні записи (EHR), медичні пристрої та системи підтримки прийняття клінічних рішень. Це може допомогти покращити догляд за пацієнтами та зменшити кількість помилок, гарантуючи доступність потрібної інформації в потрібний час.

Фінансові послуги

RabbitMQ забезпечує обмін повідомленнями в реальному часі між системами, такими як торгові платформи, системи управління ризиками та платіжні шлюзи. Це може допомогти забезпечити швидку та безпечну обробку транзакцій.

Системи IoT

RabbitMQ використовується в системах IoT для керування потоком даних між різними пристроями та датчиками. Це може допомогти забезпечити безпечну та ефективну доставку даних навіть у середовищах з обмеженою пропускною здатністю та переривчастим з’єднанням.

Kafka — це розподілена потокова платформа, призначена для обробки великих обсягів даних у режимі реального часу.

Основні випадки використання Kafka

Аналітика в реальному часі

Kafka використовується в аналітичних програмах у реальному часі для обробки та аналізу даних у міру їх створення, що дозволяє компаніям приймати рішення на основі актуальної інформації. Він може обробляти великі обсяги даних і масштабуватися, щоб задовольнити потреби навіть найвибагливіших програм.

Агрегація журналів

Kafka може об’єднувати журнали з різних систем і програм, дозволяючи компаніям відстежувати та вирішувати проблеми в режимі реального часу. Його також можна використовувати для зберігання журналів для довгострокового аналізу та звітності.

Машинне навчання

Kafka використовується в програмах машинного навчання для потокової передачі даних моделям у режимі реального часу, що дозволяє компаніям робити прогнози та вживати заходів на основі актуальної інформації. Це може допомогти підвищити точність і ефективність моделей машинного навчання.

Моя думка як про RabbitMQ, так і про Kafka

Недоліком широких і різноманітних можливостей RabbitMQ для гнучкого управління чергами повідомлень є підвищене споживання ресурсів і, відповідно, зниження продуктивності при підвищених навантаженнях. Оскільки це режим роботи складних систем, у більшості випадків Apache Kafka є найкращим інструментом для керування повідомленнями.

Наприклад, у випадку збору та агрегування багатьох подій з десятків систем і сервісів, з урахуванням їхнього георезервування, клієнтських метрик, лог-файлів і аналітики, з перспективою збільшення джерел інформації, я віддаю перевагу Kafka, однак, якщо ви перебуваєте в ситуації, коли вам просто потрібна швидка передача повідомлень, RabbitMQ чудово впорається зі своєю роботою!

Ви також можете прочитати, як інсталювати Apache Kafka у Windows і Linux.