Estoy haciendo un proyecto de maestría en un análisis de flujo de datos de Twitter en tiempo real. Para esto, ¿cuál es mejor usar, Apache Spark o Apache Storm?

La elección de una herramienta para el procesamiento de flujo depende de si queremos que los datos se procesen en ” tiempo real ” o ” casi en tiempo real “, decidiendo la tolerancia a fallos entre “al menos una semántica ” y ” exactamente una semántica ” y entre “latencia de sub-segundo ” y ” unos segundos “de latencia deberían ayudarnos a decidir entre Storm y Spark .

Aquí está Storm and Spark en conversación sobre lo que son capaces de hacer:

Tormenta: proceso un evento entrante a la vez

Spark: recopilo datos en un pequeño intervalo de tiempo como un micro lote y los proceso

Tormenta: puedo proporcionar latencia de menos de un segundo

Spark: solo proporciono unos segundos de latencia. Pero bueno, me aseguro de que los datos se lean exactamente una vez y garantizo una mejor tolerancia a fallas.

Tormenta: garantizo que leo los datos al menos una vez.

Spark: Pero eso puede permitir datos duplicados una vez que te recuperes de las fallas.

Tormenta: Ya. Pero eso es un compromiso que debe hacer si necesita un procesamiento más rápido.

Traté de ensuciarme las manos con tormenta y chispa. No encontré buenos códigos de ejemplo. Terminé escribiendo blogs yo mismo sobre el procesamiento de Twitter Streams en tiempo real usando spark y storm. Debajo están los enlaces:

  • Spark Streaming parte 1: análisis de sentimientos de Twitter en tiempo real
  • Spark streaming parte 2: análisis de sentimientos en twitter en tiempo real usando Flume
  • Spark streaming parte 3: análisis de sentimientos en twitter en tiempo real usando kafka

Usando Storm para analizar datos de Twitter e integración con kafka:

  • Procesamiento de flujo en tiempo real usando Apache Storm – Parte 1
  • Procesamiento de flujo en tiempo real usando Apache Storm y Kafka – Parte 2

También revise mis repositorios de github para el código:

  • stdatalabs / SparkTwitterStreamAnalysis
  • stdatalabs / StormTwitterStreamAnalysis

¡¡Espero que esto ayude!!

Una de las grandes diferencias entre Apache Spark y Storm es que Apache spark solo puede procesar microbatches. Eso significa que la chispa esperará un cierto tiempo, por ejemplo un segundo, y luego procesará esos datos de 1 segundo en un RDD. Storm procesará todo en base a un evento, o incluso puede usar la API Trident de Storm para realizar micro lotes.

No diría que ninguno de ellos es mejor, pero Apache Spark es un poco más publicitado que Apache Storm y tiene más contribuyentes. Es posible que desee optar por Apache Spark, porque su Spark Streaming es más nuevo. Incluso podría optar por Spark Streaming en Python, que solo salió en una de las versiones más recientes.

La opción que desea elegir depende principalmente del caso de uso. Si acepta perder datos, puede ir con tormenta. Spark tiene soporte para hadoop que es útil para análisis en tiempo real. Spark puede ayudarnos a no perder datos en absoluto. Es confiable En términos de velocidad, la tormenta apache es relativamente rápida en el procesamiento que la chispa. Pero puedes usar ambos en combinación.

Storm es una plataforma más madura y probada en batalla. Como otros han señalado, tiene una verdadera transmisión en tiempo real en lugar de micro lotes, aunque eso no debería importar para un proyecto de MS. Lo que debería importar es que tiene dependencias más pesadas para instalar, como un clúster Zookeeper. En cuanto al código, la transmisión Spark parece más fácil de escribir código, sin embargo, el tiempo de depuración es el verdadero asesino para este tipo de aplicaciones, por lo que no es tan importante. Storm probablemente tiene herramientas de depuración más maduras, sin embargo, eso a menudo significa que necesita aprender a usarlas.

Personalmente, elegiría Spark, ya que tiene la comunidad más activa en este momento, por lo que si encuentra obstáculos, habrá más personas que conocen la base del código o están trabajando con la base del código dispuestos a ayudar.

Apache Storm como Spark son capaces de procesar el flujo, pero una diferencia básica es que Storm es en realidad un motor de procesamiento de flujo en tiempo real, pero Spark realiza el procesamiento de flujo usando el concepto de Micro-lotes.

En el caso del procesamiento de Stream, creo que Storm es más maduro que Spark Streaming y está mucho más en uso que Spark Streaming (según mi observación).

En cuanto al rendimiento, depende principalmente de cómo escribe su código y qué tan complejo es su caso de uso, pero si desea un nivel de latencia de microsegundos, entonces Storm es el que debe elegir.

Tenía el mismo requisito para hacer el procesamiento de flujo en tiempo real para mi tesis de maestría y estaba contemplando tanto Storm como Spark Streaming. Terminé usando Storm para mi tesis.

Depende de su demanda. Hay muchas diferencias entre Storm y Streaming, puede obtener más información sobre esto en Storm vs. Spark Streaming: comparación en paralelo u otras páginas. Si desea alcanzar una latencia de nivel ms, Storm será una mejor opción, pero si no lo necesita y el alto rendimiento es uno de sus objetivos, Streaming será el mejor. Además, creo que es más conveniente escribir un programa en Spark Streaming 🙂