Apache Kafka vs Apache Storm


102

Apache Kafka: Розподілена система обміну повідомленнями
Apache Storm: Обробка повідомлень у режимі реального часу

Як ми можемо використовувати обидві технології в трубопроводі даних в режимі реального часу для обробки даних про події?

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

Відповіді:


158

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

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

Загальний потік цих інструментів (наскільки я це знаю) полягає в наступному:

система в режимі реального часу -> Kafka -> Storm -> NoSql -> BI (необов'язково)

Отже, у вас в реальному часі додаток, що обробляє дані з великим обсягом, надсилає їх у чергу Kafka. Буря витягує дані з кафки і застосовує деякі необхідні маніпуляції. У цей момент вам зазвичай подобається отримати певні переваги від цих даних, тому ви або надішліть їх в якийсь Nosql db для додаткових обчислень BI, або ви можете просто запитати цей NoSql з будь-якої іншої системи.


Спасибі Форхас. Це дуже корисно. Одне запитання: чи можемо ми використовувати Apache Kafka для агрегації файлів журналів Apache чи нам ще потрібен Flume?
Анант Дуарі

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

Рекомендую використовувати GrayLog і підключити його до apache kafka. У GrayLog вже є вхідний плагін Kakfa.
saeid rastak

36

Кафка і Шторм мають дещо інше призначення:

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

Шторм - це масштабована аналітична система в режимі реального часу, що відрізняється відмовою (думайте, як Hadoop в режимі реального часу). Він споживає дані з джерел (Spouts) і передає їх у трубопровід (Bolts). Ви можете комбінувати їх у топології. Тож Шторм - це в основному обчислювальна одиниця (агрегація, машинне навчання).


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


32

Я знаю, що це старша нитка, і порівняння Apache Kafka і Storm були правильними і правильними, коли вони були написані, але варто зазначити, що Apache Kafka розвинувся багато років і з версії 0.10 (квітень 2016) Kafka включила API Kafka Streams, який надає можливості обробки потоку без необхідності будь-якого додаткового програмного забезпечення, такого як Storm. Kafka також включає API Connect для підключення до різних джерел і раковин (пунктів призначення) даних.

Блог оголошень - https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

Поточна документація Apache - https://kafka.apache.org/documentation/streams/

У Kafka 0.11 функціональність потокової обробки була додатково розширена, щоб забезпечити рівномірну семантику та транзакції

https://www.confluent.io/blog/exact-once-semantics-are-possible-heres-how-apache-kafka-does-it/


1
Отже, в основному система в режимі реального часу спілкується безпосередньо з Kafkaas кінцевою точкою і Kafka зберігає, наприклад, з БД?
problemofficer

2
Так, зараз Kafka включає Kafka Connect для спілкування з базами даних та іншими джерелами даних (syslog, JMS, файли журналів тощо) та Kafka Streams для обробки потоку (приєднується, перетворює, фільтри, агрегації) та повертається до Kafka Connect, щоб написати в іншу базу даних чи сховище.
Ганс Єсперсен

15

Ось як це працює

Кафка - для забезпечення потоку в режимі реального часу

Буря - для виконання деяких операцій у цьому потоці

Ви можете подивитися на проект GitHub https://github.com/abhishekgoel137/kafka-nodejs-d3js .

(D3js - бібліотека графічних подань)

Ідеальний випадок:

Realtime application -> Kafka -> Storm -> NoSQL -> d3js

Цей сховище базується на:

Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js

1
Абхішек, посилання, згадане у вищевказаній відповіді, порушено. Чи можете ви оновити посилання?
Абхіджіт Гайквад

4

Як кожен пояснює вам, що Apache Kafka: це безперервна черга на обмін повідомленнями

Apache Storm: це безперервний інструмент для обробки

тут у цьому аспекті Kafka отримає дані з будь-якого веб-сайту, наприклад, FB, Twitter, використовуючи API, і ці дані обробляються за допомогою Apache Storm, і ви можете зберігати оброблені дані в будь-якій базі даних.

https://github.com/miguno/kafka-storm-starter

Просто дотримуйтесь цього, ви отримаєте деяке уявлення


3

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


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