spark - Apache Kafka vs Apache Storm
apache kafka spark (6)
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 idéntico. ¿Cómo podemos utilizar ambas tecnologías en una cadena de datos?
Así es como funciona
Kafka : para proporcionar una transmisión en tiempo real
Tormenta : para realizar algunas operaciones en esa secuencia
Puede echar un vistazo al proyecto GitHub https://github.com/abhishekgoel137/kafka-nodejs-d3js .
(D3js es una biblioteca de representación gráfica)
Caso ideal:
Realtime application -> Kafka -> Storm -> NoSQL -> d3js
Este repositorio se basa en:
Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js
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 mediante API y los datos se procesan utilizando Apache Storm y puede almacenar los datos procesados en cualquiera de las bases de datos que desee.
https://github.com/miguno/kafka-storm-starter
Sólo síguelo obtendrás alguna idea
Cuando tengo un caso de uso que me obliga a visualizar o alertar sobre patrones (piense en las tendencias de Twitter), mientras sigo procesando los eventos, tengo varios patrones.
NiFi me permitiría procesar un evento y actualizar un almacén de datos persistente con baja (er) agregación de lotes con 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 durante muchos segundos, puedo procesar lotes de kafka, en hdfs (Parquet) y procesarlos.
Si necesito saber en segundos, necesito NiFi, y probablemente incluso Storm. (Piense en monitorear miles de estaciones terrenas, donde necesito ver las condiciones meteorológicas de la región pequeña para las advertencias de tornado).
Kafka y Storm tienen un propósito ligeramente diferente:
Kafka es un intermediario de mensajes distribuidos que puede manejar gran cantidad de mensajes por segundo. Utiliza el paradigma publicar-suscribir y se basa en temas y particiones. Kafka usa Zookeeper para compartir y guardar el estado entre intermediarios. 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, en tiempo real (piense como Hadoop en tiempo real). Consume datos de las fuentes (Spouts) y los pasa a la tubería (Pernos). Puede combinarlos en la topología. Entonces Storm es básicamente una unidad de cómputo (agregación, aprendizaje automático).
Pero puede usarlos juntos: por ejemplo, su aplicación usa kafka para enviar datos a otros servidores que usan la tormenta para hacer algunos cálculos sobre ella.
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 Kafka Streams API que proporciona capacidades de procesamiento de flujo sin la necesidad de ningún software adicional como Storm. Kafka también incluye Connect API para conectarse a varias fuentes y receptores (destinos) de datos.
Anuncio blog - 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 flujo se expandió aún más para proporcionar exactamente una vez semántica y transacciones.
https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/
Utiliza Apache Kafka como una cola distribuida y sólida que puede manejar datos de gran volumen y le permite pasar mensajes de un punto final a otro.
Storm no es una cola. Es un sistema que tiene capacidades distribuidas de procesamiento en tiempo real, lo que significa que puede ejecutar todo tipo de manipulaciones en tiempo real en paralelo.
El flujo común de estas herramientas (tal como lo conozco) es el siguiente:
sistema en tiempo real -> Kafka -> Tormenta -> NoSql -> BI (opcional)
Así que tienes tu aplicación en tiempo real manejando datos de alto volumen, la envía a la cola de Kafka. Storm extrae los datos de kafka y aplica alguna manipulación requerida. En este punto, normalmente desea obtener algunos beneficios de estos datos, por lo que puede enviarlos a algunos Nosql db para realizar cálculos adicionales de BI, o simplemente puede consultar este NoSql desde cualquier otro sistema.