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.
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ń.
źródło
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/
źródło
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:
To repozytorium jest oparte na:
źródło
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ł
źródło
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).
źródło
Po prostu Kafka wysyła wiadomości z węzła do innego, a Storm je przetwarza. Sprawdź ten przykład, w jaki sposób możesz zintegrować Apache Kafka z Storm
źródło