Apache Kafka против Apache Storm

102

Apache Kafka: распределенная система обмена сообщениями
Apache Storm: обработка сообщений в реальном времени

Как мы можем использовать обе технологии в конвейере данных в реальном времени для обработки данных о событиях?

Что касается конвейера данных в реальном времени, мне кажется, что оба они выполняют свою работу одинаково. Как мы можем использовать обе технологии в конвейере данных?

Анант Дуари
источник

Ответы:

158

Вы используете Apache Kafka в качестве распределенной и надежной очереди, которая может обрабатывать большие объемы данных и позволяет передавать сообщения от одной конечной точки к другой.

Шторм - это не очередь. Это система с распределенными возможностями обработки в реальном времени, что означает, что вы можете выполнять все виды манипуляций с данными в реальном времени параллельно.

Общий поток этих инструментов (насколько я знаю) выглядит следующим образом:

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

Итак, у вас есть приложение в реальном времени, которое обрабатывает большие объемы данных и отправляет их в очередь Kafka. Storm извлекает данные из kafka и применяет некоторые необходимые манипуляции. На этом этапе вы обычно хотите получить некоторые преимущества от этих данных, поэтому вы либо отправляете их в какую-то базу данных Nosql для дополнительных вычислений BI, либо вы можете просто запросить этот NoSql из любой другой системы.

Forhas
источник
Спасибо, Форхас. Это очень полезно. Один вопрос: можем ли мы использовать Apache Kafka для агрегирования файлов журналов Apache или нам все еще нужен Flume для этого?
Анант Дуари
Думаю, можно, хотя я не знаком с таким потоком. Может быть, вы можете проверить Splunk для ваших нужд (только предположение ..).
forhas
Рекомендую использовать GrayLog и подключить его к apache kafka. GrayLog уже имеет плагин ввода kakfa.
Саид Растак
36

У Кафки и Шторма несколько иное назначение:

Kafka - это распределенный брокер сообщений, который может обрабатывать большое количество сообщений в секунду. Он использует парадигму публикации-подписки и полагается на темы и разделы. Kafka использует Zookeeper для обмена и сохранения состояния между брокерами. Таким образом, Кафка в основном отвечает за передачу сообщений с одной машины на другую.

Storm - это масштабируемая, отказоустойчивая аналитическая система в реальном времени (как Hadoop в реальном времени). Он потребляет данные из источников (Spouts) и передает их конвейеру (Bolts). Вы можете объединить их в топологию. Итак, Storm - это, по сути, вычислительная единица (агрегирование, машинное обучение).


Но вы можете использовать их вместе: например, ваше приложение использует kafka для отправки данных на другие серверы, которые используют шторм для выполнения некоторых вычислений.

Сальвадор Дали
источник
32

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

Блог объявлений - https://www.confluent.io/blog/introduction-kafka-streams-stream-processing-made-simple/

Текущая документация Apache - https://kafka.apache.org/documentation/streams/

В 0.11 Kafka функциональность потоковой обработки была дополнительно расширена, чтобы обеспечить семантику и транзакции ровно один раз.

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

Ганс Есперсен
источник
1
Итак, в основном теперь система реального времени напрямую связывается с Kafka как конечной точкой, а Kafka хранит, например, в БД?
problemofficer
2
Да, теперь Kafka включает Kafka Connect для взаимодействия с базами данных и другими источниками данных (системный журнал, JMS, файлы журналов и т. Д.) И потоки Kafka для обработки потоков (объединения, преобразования, фильтры, агрегаты) и обратно в Kafka Connect для записи в другую базу данных или репозиторий.
Hans Jespersen
15

Вот как это работает

Kafka - для обеспечения потока в реальном времени

Storm - для выполнения некоторых операций с этим потоком

Вы можете взглянуть на проект 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 позволил бы мне обработать событие и обновить постоянное хранилище данных с помощью небольшой (er) пакетной агрегации с очень, очень небольшим количеством пользовательского кода.
Storm (много настраиваемого кода) позволяет мне почти в реальном времени получать доступ к трендам.
Если я могу подождать много секунд, я могу выполнить пакетную обработку из kafka в hdfs (Parquet) и обработать.
Если мне нужно знать за секунды, мне понадобится NiFi и, возможно, даже Storm. (Подумайте о мониторинге тысяч земных станций, где мне нужно видеть погодные условия небольшого региона для предупреждений о торнадо).

Daemeon
источник
0

Просто Kafka отправляет сообщения от узла к другому, а Storm обрабатывает сообщения. Посмотрите этот пример того, как вы можете интегрировать Apache Kafka с Storm

Аль-Мустафа Азхари
источник