Я оцінюю Google Pub / Sub проти Kafka? [зачинено]


81

Я багато не працював над kafka, але хотів побудувати конвеєр даних у GCE. Тож ми хотіли знати Кафку проти PUB / Sub. В основному я хочу знати, як підтримується послідовність повідомлень, доступність повідомлень, надійність повідомлень як у Kafka, так і в Pub / sub

Дякую


6
Не зовсім те, що ви шукаєте, але, можливо, було б для вас цікавим прочитанням - подорож Spotify до хмари: чому Spotify переніс свою систему доставки подій з Kafka на Google Cloud Pub / Sub
DoiT International

Відповіді:


92

Окрім того, що Google Pub / Sub управляється Google і Kafka є відкритим кодом, інша відмінність полягає в тому, що Google Pub / Sub - це черга повідомлень (наприклад, Rabbit MQ), де, як Kafka, це більше журнал потокового передавання. Ви не можете "перечитати" або "повторно відтворити" повідомлення за допомогою Pubsub. (РЕДАКТУВАТИ - станом на 2019 лютого ви МОЖЕТЕ відтворити повідомлення та шукати назад у часі до певної позначки часу, відповідно до коментаря нижче)

З Google Pub / Sub, як тільки повідомлення буде прочитано з підписки та підтверджено, воно зникне. Щоб мати більше копій повідомлення для читання різними читачами, ви «роздуваєте» тему, створюючи «підписки» на цю тему, де кожна підписка матиме цілу копію всього, що входить у тему. Але це також збільшує вартість, оскільки Google стягує плату за використання Pub / Sub за обсяг зчитуваних даних.

У Kafka ви встановлюєте термін зберігання (я думаю, що це 7 днів за замовчуванням), і повідомлення залишаються в Kafka незалежно від того, скільки споживачів його читають. Ви можете додати нового споживача (він же абонент) і почати його споживати з початку теми в будь-який час. Ви також можете встановити нескінченний період зберігання, і тоді ви можете в основному використовувати Kafka як незмінний магазин даних, як описано тут: http://stackoverflow.com/a/22597637/304262

Amazon AWS Kinesis - керована версія Kafka, тоді як я думаю про Google Pubsub як про керовану версію Rabbit MQ. Amazon SNS із SQS також схожий на Google Pubsub (SNS забезпечує розмову, а SQS - чергу).


5
Повторне відтворення - найважливіша характеристика більшості архітектур, орієнтованих на події. Крім того, Кафка додає порядковий номер до повідомлень і, отже, стає авторитетним джерелом послідовності.
Базз Мошетті

4
Шлях до "повторного відтворення" за допомогою системи черг повідомлень, як PubSub, полягає в тому, щоб роздути тему, щоб збільшити кількість підписок (тобто зробити більше копій повідомлень), і кожен споживач споживає власну передплату в своєму власному темпі. Припускаю, ви можете мати передплату, призначену для повторного відтворення, коли вам це потрібно. Щоб зробити те ж саме з Kafka, ви повинні створити нового споживача і почати споживати його спереду (оскільки Kafka не робить копію повідомлень, він просто надає кожному споживачеві власний зсув "покажчика", щоб відстежувати те, що було вже прочитано)
gunit

2
Kinesis можна сприймати як керовану службу, яка семантично схожа на Kafka, але невірно стверджувати, що це «керована версія Kafka». Щодо фактичного "керованого Кафки", див. Confluent Cloud confluent.io/confluent-cloud
Еммет Батлер

6
Cloud Pub / Sub нещодавно додав підтримку для відтворення раніше визнаних повідомлень. Посібник із швидкого запуску та публікація в блозі пояснюють, як користуватися цією функцією.
Камал Абуль-

1
@EmmettButler має рацію; Kinesis - це власний продукт. Навіть якщо він працював від Kafka, він вводить зовсім інший API. Amazon пропонує керований Kafka з AWS MSK .
user0000001

13

Я читав відповіді вище, і хотів би їх доповнити, оскільки, думаю, є деякі деталі, які очікують на розгляд:

Повністю керована система Обидві системи можуть мати повністю керовану версію в хмарі. Google надає Pubsub, і є кілька повністю керованих версій Kafka, які ви можете налаштувати в хмарі та в режимі попередньої підготовки .

Cloud vs On-prem Я думаю, це реальна різниця між ними, оскільки Pubsub пропонується лише як частина екосистеми GCP, тоді як Apache Kafka ви можете використовувати як хмарну службу, так і службу On-prem (виконуючи конфігурацію кластера самостійно)

Дублювання повідомлень - за допомогою Kafka вам потрібно буде самостійно управляти зміщеннями повідомлень, використовуючи зовнішнє сховище, наприклад, Apache Zookeeper. Таким чином ви можете відстежувати повідомлення, прочитані дотепер Споживачами. Pubsub працює, використовуючи підтвердження повідомлення, якщо ваш код не підтверджує повідомлення до закінчення терміну, повідомлення надсилається знову, таким чином ви можете уникнути дублювання повідомлень або іншим способом уникнути - використання Cloud Dataflow PubsubIO.

Політика збереження. Як у Kafka, так і у Pubsub є параметри налаштування максимального часу збереження, за замовчуванням, я думаю, це 7 днів.

Група споживачів проти підписки Будьте обережні, як читаєте повідомлення в обох системах. Pubsub використовує передплати, ви створюєте передплату, а потім починаєте читати повідомлення з цієї передплати. Після прочитання та підтвердження повідомлення повідомлення для цієї передплати зникає. Кафка використовує поняття "група споживачів" і "розділ", кожен процес споживача належить групі, і коли повідомлення читається з певного розділу, тоді будь-який інший процес споживача, який належить до тієї ж "групи споживачів", не зможе прочитати це повідомлення (це тому, що з часом зсув збільшиться). Ви можете бачити зміщення як покажчик, який повідомляє процесам, яке повідомлення потрібно прочитати.

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

  • Якщо рішення має бути у GCP, очевидно, використовуйте Google Cloud Pubsub. Ви уникнете всіх зусиль з налаштування або заплатите додатково за повністю автоматизовану систему, яка потрібна Kafka.

  • Якщо рішення вимагає даних процесу в потоковому режимі, але також має підтримувати пакетну обробку (врешті-решт), корисно використовувати Cloud Dataflow + Pubsub.

  • Якщо рішення вимагає використання деякої обробки Spark, ви можете вивчити Spark Streaming (яку ви можете налаштувати Kafka для обробки потоку)

Загалом, обидві є дуже надійними системами обробки потоків. Суттєва різниця полягає в тому, що Pubsub - це хмарний сервіс, приєднаний до GCP, тоді як Apache Kafka може використовуватися як у хмарі, так і в попередній версії.


2
Я думаю, це може ввести в оману; Якщо ви не хочете писати власну бібліотеку за дротовим протоколом Kafka, існуючі клієнти вже надають настроювані механізми для здійснення комітування. Також доручені компенсації зберігаються не в Zookeeper, а в спеціальній темі "__consumer_offsets", яка повторюється серед брокерів. Це хороше читання: confluent.io/blog/…
Золтан

Насправді я дійсно не розумію вашого твердження про зберігання компенсацій вручну: With Kafka you will need to manage the offsets of the messages by yourself, using an external storage, such as, Apache Zookeeper => Проголосування проти
Тарифи

12

Велика різниця між Kafka та Cloud Pub / Sub полягає в тому, що Cloud Pub / Sub повністю управляється для вас. Вам не потрібно турбуватися про машини, налаштування кластерів, точну настройку параметрів тощо, а це означає, що багато роботи з DevOps обробляється за вас, і це важливо, особливо коли вам потрібно масштабувати.


7
Це насправді не різниця, оскільки є кілька постачальників, які також пропонують Kafka як повністю керовану послугу. Можливо, різниця в тому, що Google PubSub доступний лише як служба в Googles Cloud, тому немає попередньої версії, а також не існує керованої служби, яка працює в інших хмарних провайдерах, таких як AWS або Azure.
Ганс Єсперсен,

2
"Google PubSub доступний лише як служба в Googles Cloud", що є неправильним ... ваша програма не пов’язана з розгортанням в Google App Engine .. Ви можете підключитися та публікувати в GooglePub / Sub "від будь-якого клієнта, якщо ви надійно підключитися до нього через "сервісний рахунок".
Джеріл Кук

12
@JerylCook Я думаю, він просто означає, що ти не можеш встановити паб /
підвузник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.