Professional Documents
Culture Documents
Порівняння RabbitMQ і Kafka
Порівняння RabbitMQ і Kafka
Реферат
з дисципліни «Технології комп'ютерного проектування»
Виконала:
студентка групи АИ-202
Полянський М.О.
Перевірив:
Іванов О. В.
Одеса 2022
Зміст
Вступ.........................................................................................................................3
1. RabbitMQ............................................................................................................4
1.1 Exchange'і та черги......................................................................................4
1.2 Гарантії...........................................................................................................7
1.3 Проштовхування (push) та попередня вибірка одержувачів.....................8
1.4 Маршрутизація..............................................................................................8
1.5 Exchange з недоставленими повідомленнями...........................................11
1.6 Обмінники та черги без даних...................................................................11
2. Apache Kafka....................................................................................................12
2.1 Партиції та групи одержувачів..................................................................15
2.2 Проштовхування (push) проти вивантаження (pull)................................17
2.3 Публікація та підписка................................................................................18
2.4 Стиснення журналу.....................................................................................22
3. Докладніше про впорядкування повідомлень..............................................23
Висновки................................................................................................................24
2
Вступ
3
1. RabbitMQ
4
Одержувачі надсилають підтвердження успіху/помилки
6
Рис. 4. Кілька паблішерів, кілька черг із конкуруючими одержувачами
1.2 Гарантії
7
використовуючи Consistent Hashing Exchange, як ви побачите в наступному
розділі шаблонів і топологій.
1.4 Маршрутизація
8
чергу або на інший exchange, потрібна прив'язка. Різні exchange'и вимагають
різних прив'язок. Існує чотири типи Exchange і пов'язані з ними прив'язки:
9
Рис. 5. Приклад topic exchange'а
10
1.5 Exchange з недоставленими повідомленнями
11
2. Apache Kafka
12
Замість того, щоб розміщувати повідомлення в чергу FIFO і
відстежувати статус цього повідомлення в черзі, як це робить RabbitMQ,
Kafka просто додає його до журналу, і на цьому все.
13
Рис. 7. Один продюсер, одна партиція, два незалежні одержувачі
14
Рис. 8. Три партиції та дві групи по три отримувачі
15
підтримувати конкуруючих одержувачів, тому наш додаток для виставлення
рахунків може використовувати лише одну частину кожного розділу.
Існує неявна, але важлива перевага, яка була у Kafka з самого початку,
а в RabbitMQ додалося пізніше – черговість повідомлень та
паралелізм. RabbitMQ підтримує глобальний порядок усієї черги, але не
пропонує способу підтримувати це розташування під час її паралельної
обробки. Kafka не може запропонувати глобальне розташування топіка, але
пропонує черговість на рівні партиції. Тому, якщо вам потрібно тільки
вибудовувати черговість пов'язаних повідомлень, Kafka пропонує як
16
впорядковану доставку повідомлень, так і впорядковану обробку
повідомлень.
17
RabbitMQ використовує модель проштовхування (push) і, таким чином,
перевантаження повідомлень одержувачами за допомогою налаштованої
одержувачем межі попередньої вибірки. Це чудово підходить для обміну
повідомленнями з низьким значенням затримки та добре працює для
архітектури RabbitMQ на основі черги. З іншого боку, Kafka використовує
модель витягування (pull), де одержувачі вимагають партії повідомлень із
заданого відносного усунення. Щоб уникнути нескінченних порожніх циклів,
коли жодних повідомлень не існує за межами поточної відносної адреси,
Kafka припускає long-polling.
18
Рис. 9. Одержувачі з різними відносними адресами
19
Рис. 11. Деякі одержувачі зчитують із кількох партій
20
Рис. 12. Один бездіяльний одержувач
21
додано нові партиції
22
3. Докладніше про впорядкування повідомлень
Ми розглянули, що масштабування та підтримка порядку повідомлень
одночасно можливе як з RabbitMQ, так і з Kafka, але з Kafka це набагато
простіше. З RabbitMQ ми повинні використовувати консистентне хешування
та вручну впроваджувати логіку групи одержувачів, використовуючи
розподілений узагальнений сервіс, такий як ZooKeeper або Consul.
23
Висновки
24