Я читав відповіді вище, і хотів би їх доповнити, оскільки, думаю, є деякі деталі, які очікують на розгляд:
Повністю керована система Обидві системи можуть мати повністю керовану версію в хмарі. 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 може використовуватися як у хмарі, так і в попередній версії.