Apache Kafka contra Apache Storm

102

Apache Kafka: sistema de mensajería distribuida
Apache Storm: procesamiento de mensajes en tiempo real

¿Cómo podemos utilizar ambas tecnologías en una canalización de datos en tiempo real para procesar datos de eventos?

En términos de canalización de datos en tiempo real, me parece que ambos hacen el trabajo de manera idéntica. ¿Cómo podemos utilizar ambas tecnologías en una canalización de datos?

Ananth Duari
fuente

Respuestas:

158

Utiliza Apache Kafka como una cola robusta y distribuida que puede manejar grandes volúmenes de datos y le permite pasar mensajes de un punto final a otro.

Storm no es una cola. Es un sistema que ha distribuido capacidades de procesamiento en tiempo real, lo que significa que puede ejecutar todo tipo de manipulaciones sobre datos en tiempo real en paralelo.

El flujo común de estas herramientas (como yo lo conozco) es el siguiente:

sistema en tiempo real -> Kafka -> Storm -> NoSql -> BI (opcional)

Entonces, su aplicación en tiempo real maneja datos de alto volumen y los envía a la cola de Kafka. Storm extrae los datos de kafka y aplica la manipulación necesaria. En este punto, por lo general, le gustaría obtener algunos beneficios de estos datos, por lo que los envía a alguna base de datos Nosql para cálculos de BI adicionales, o simplemente puede consultar este NoSql desde cualquier otro sistema.

forhas
fuente
Gracias Forhas. Esto es muy útil. Una pregunta: ¿podemos usar Apache Kafka para agregar archivos de registro de Apache o todavía necesitamos que Flume lo haga?
Ananth Duari
Supongo que puede, aunque no estoy familiarizado con ese flujo. Tal vez pueda consultar Splunk para sus necesidades (solo una suposición ...).
para
Recomiendo usar GrayLog y conectarlo a apache kafka. GrayLog ya tiene un complemento de entrada kakfa.
saeid rastak
36

Kafka y Storm tienen un propósito ligeramente diferente:

Kafka es un agente de mensajes distribuidos que puede manejar una gran cantidad de mensajes por segundo. Utiliza el paradigma de publicación-suscripción y se basa en temas y particiones. Kafka usa Zookeeper para compartir y guardar el estado entre corredores. Entonces, Kafka es básicamente responsable de transferir mensajes de una máquina a otra.

Storm es un sistema analítico escalable, tolerante a fallas y en tiempo real (piense como Hadoop en tiempo real). Consume datos de fuentes (Spouts) y los pasa a la tubería (Bolts). Puede combinarlos en la topología. Entonces Storm es básicamente una unidad de cálculo (agregación, aprendizaje automático).


Pero puede usarlos juntos: por ejemplo, su aplicación usa kafka para enviar datos a otros servidores que usan Storm para realizar algunos cálculos.

Salvador Dalí
fuente
32

Sé que este es un hilo más antiguo y las comparaciones de Apache Kafka y Storm eran válidas y correctas cuando se escribieron, pero vale la pena señalar que Apache Kafka ha evolucionado mucho a lo largo de los años y desde la versión 0.10 (abril de 2016) Kafka ha incluido una API de Kafka Streams que proporciona capacidades de procesamiento de flujos sin la necesidad de ningún software adicional como Storm. Kafka también incluye la API Connect para conectarse a varias fuentes y receptores (destinos) de datos.

Blog de anuncios: https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

Documentación actual de Apache: https://kafka.apache.org/documentation/streams/

En 0.11 Kafka, la funcionalidad de procesamiento de secuencias se amplió aún más para proporcionar transacciones y semánticas de una sola vez.

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

Hans Jespersen
fuente
1
Entonces, básicamente, ahora un sistema en tiempo real se comunica directamente con Kafka como el punto final y Kafka almacena, por ejemplo, en una base de datos.
problemofficer
2
Sí, ahora Kafka incluye Kafka Connect para comunicarse con bases de datos y otras fuentes de datos (syslog, JMS, archivos de registro, etc.) y Kafka Streams para realizar el procesamiento de la transmisión (uniones, transformaciones, filtros, agregaciones) y volver a Kafka Connect para escribir a otra base de datos o repositorio.
Hans Jespersen
15

Así es como funciona

Kafka : para proporcionar una transmisión en tiempo real

Tormenta : para realizar algunas operaciones en ese flujo

Puede echar un vistazo al proyecto de GitHub https://github.com/abhishekgoel137/kafka-nodejs-d3js .

(D3js es una biblioteca de representación de gráficos)

Caso ideal:

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

Este repositorio se basa en:

Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js
Abhishek Goel
fuente
1
Abhishek, el enlace mencionado en la respuesta anterior está roto. ¿Puede actualizar el enlace?
Abhijit Gaikwad
4

Como todos te explican que Apache Kafka: es una cola de mensajería continua

Apache Storm: es una herramienta de procesamiento continuo

aquí, en este aspecto, Kafka obtendrá los datos de cualquier sitio web como FB, Twitter usando API y esos datos se procesan usando Apache Storm y puede almacenar los datos procesados ​​en cualquier base de datos que desee.

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

Solo síguelo tendrás una idea

syed jameer
fuente
3

Cuando tengo un caso de uso que me obliga a visualizar o alertar sobre patrones (piense en las tendencias de Twitter), mientras continúo procesando los eventos, tengo varios patrones.
NiFi me permitiría procesar un evento y actualizar un almacén de datos persistente con una agregación de lotes más baja (más) con muy, muy poca codificación personalizada.
Storm (mucha codificación personalizada) me permite acceder casi en tiempo real a los eventos de tendencias.
Si puedo esperar muchos segundos, puedo procesar por lotes de kafka, en hdfs (Parquet) y procesar.
Si necesito saberlo en segundos, necesito NiFi, y probablemente incluso Storm. (Piense en monitorear miles de estaciones terrestres, donde necesito ver las condiciones climáticas de una región pequeña para detectar advertencias de tornados).

Daemeon
fuente