Apache Kafka vs Apache Storm

102

Apache Kafka: rozproszony system przesyłania wiadomości
Apache Storm: przetwarzanie wiadomości w czasie rzeczywistym

Jak możemy wykorzystać obie technologie w potoku danych czasu rzeczywistego do przetwarzania danych o zdarzeniach?

Jeśli chodzi o przepływ danych w czasie rzeczywistym, wydaje mi się, że oba zadania są identyczne. Jak możemy wykorzystać obie technologie w potoku danych?

Ananth Duari
źródło

Odpowiedzi:

158

Używasz Apache Kafka jako rozproszonej i niezawodnej kolejki, która może obsługiwać duże ilości danych i umożliwia przekazywanie wiadomości z jednego punktu końcowego do drugiego.

Storm nie jest kolejką. Jest to system, który ma rozproszone możliwości przetwarzania w czasie rzeczywistym, co oznacza, że ​​można równolegle wykonywać wszelkiego rodzaju manipulacje na danych w czasie rzeczywistym.

Wspólny przepływ tych narzędzi (o ile wiem) wygląda następująco:

system-czasu rzeczywistego -> Kafka -> Storm -> NoSql -> BI (opcjonalnie)

Więc masz aplikację czasu rzeczywistego obsługującą dane o dużej objętości, wysyła je do kolejki Kafka. Storm pobiera dane z kafki i stosuje pewne wymagane manipulacje. W tym momencie zazwyczaj lubisz czerpać korzyści z tych danych, więc albo wysyłasz je do jakiejś bazy danych Nosql w celu wykonania dodatkowych obliczeń BI, albo możesz po prostu zapytać o to NoSql z dowolnego innego systemu.

forhas
źródło
Dzięki Forhas. To jest bardzo pomocne. Jedno pytanie, czy możemy użyć Apache Kafka do agregacji plików dziennika Apache, czy nadal potrzebujemy do tego Flume?
Ananth Duari,
Myślę, że możesz, chociaż nie znam takiego przepływu. Może możesz sprawdzić Splunk pod kątem swoich potrzeb (tylko przypuszczenie).
ma miejsce
Polecam skorzystać z GrayLog i podłączyć go do apache kafka. GrayLog ma już wtyczkę wejściową kakfa.
saeid rastak
36

Kafka i Storm mają nieco inny cel:

Kafka to rozproszony broker komunikatów, który może obsługiwać dużą liczbę wiadomości na sekundę. Używa paradygmatu publikuj-subskrybuj i opiera się na tematach i partycjach. Kafka używa Zookeepera do udostępniania i zapisywania stanu między brokerami. Tak więc Kafka jest zasadniczo odpowiedzialny za przesyłanie wiadomości z jednego komputera do drugiego.

Storm to skalowalny, odporny na błędy system analityczny działający w czasie rzeczywistym (myślę jak Hadoop w czasie rzeczywistym). Pobiera dane ze źródeł (wylewki) i przekazuje je do rurociągu (śruby). Możesz łączyć je w topologii. Więc Storm jest w zasadzie jednostką obliczeniową (agregacja, uczenie maszynowe).


Ale możesz ich używać razem: na przykład twoja aplikacja używa kafki do wysyłania danych do innych serwerów, które używają storm do wykonania na niej pewnych obliczeń.

Salvador Dali
źródło
32

Wiem, że jest to starszy wątek i porównania Apache Kafka i Storm były aktualne i poprawne w momencie ich pisania, ale warto zauważyć, że Apache Kafka bardzo ewoluował na przestrzeni lat i od wersji 0.10 (kwiecień 2016) Kafka zawiera interfejs API Kafka Streams, który zapewnia możliwości przetwarzania strumieniowego bez potrzeby stosowania dodatkowego oprogramowania, takiego jak Storm. Kafka zawiera również Connect API do łączenia się z różnymi źródłami i ujściami (miejscami docelowymi) danych.

Blog z ogłoszeniami - https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

Aktualna dokumentacja Apache - https://kafka.apache.org/documentation/streams/

W wersji 0.11 Kafka funkcjonalność przetwarzania strumienia została dodatkowo rozszerzona, aby zapewnić dokładnie raz semantykę i transakcje.

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

Hans Jespersen
źródło
1
Czyli teraz w zasadzie system czasu rzeczywistego komunikuje się bezpośrednio z Kafką jako punktem końcowym i sklepami Kafki, np. Do bazy danych?
oficer problemowy
2
Tak, teraz Kafka zawiera Kafka Connect, aby komunikować się z bazami danych i innymi źródłami danych (syslog, JMS, pliki dziennika itp.), Oraz Kafka Streams w celu przetwarzania strumienia (łączenia, transformacje, filtry, agregacje) i z powrotem do Kafka Connect w celu zapisu do innej bazy danych lub repozytorium.
Hans Jespersen
15

Tak to działa

Kafka - aby zapewnić strumień w czasie rzeczywistym

Storm - Aby wykonać pewne operacje na tym strumieniu

Możesz rzucić okiem na projekt GitHub https://github.com/abhishekgoel137/kafka-nodejs-d3js .

(D3js to biblioteka reprezentująca wykresy)

Idealny przypadek:

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

To repozytorium jest oparte na:

Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js
Abhishek Goel
źródło
1
Abhishek, link podany w powyższej odpowiedzi jest uszkodzony. Czy możesz zaktualizować link?
Abhijit Gaikwad
4

Jak każdy wyjaśnia, że ​​Apache Kafka: to ciągła kolejka wiadomości

Apache Storm: to narzędzie do ciągłego przetwarzania

tutaj w tym aspekcie Kafka pobierze dane z dowolnej strony internetowej, takiej jak FB, Twitter, za pomocą API, a dane te są przetwarzane za pomocą Apache Storm, a przetworzone dane można przechowywać w dowolnej bazie danych.

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

Po prostu podążaj za nim, a otrzymasz pomysł

syed jameer
źródło
3

Kiedy mam przypadek użycia, który wymaga ode mnie wizualizacji lub ostrzegania o wzorcach (pomyśl o trendach na Twitterze), jednocześnie kontynuując przetwarzanie zdarzeń, mam kilka wzorców.
NiFi pozwoliłoby mi przetworzyć zdarzenie i zaktualizować trwały magazyn danych z mniejszą (mniejszą) agregacją wsadową z bardzo, bardzo małą ilością niestandardowego kodowania.
Storm (dużo niestandardowego kodowania) umożliwia mi dostęp do popularnych wydarzeń w czasie niemal rzeczywistym.
Jeśli mogę poczekać wiele sekund, mogę wsadować z kafki do hdfs (Parquet) i przetworzyć.
Jeśli chcę wiedzieć w kilka sekund, potrzebuję NiFi, a prawdopodobnie nawet Storma. (Pomyśl o monitorowaniu tysięcy stacji naziemnych, gdzie muszę zobaczyć warunki pogodowe w małym regionie pod kątem ostrzeżeń przed tornadem).

Daemeon
źródło