Evaluación y prueba de concepto de tecnologías de procesado en streaming y tiempo real (IV): Apache Spark Streaming


Seguimos adentrándonos en el interesante mundo de las tecnologías streaming. En el anterior artículo de esta serie tratábamos RTS DataTorrent y Apache Apex. Esta vez nos centramos en Apache Spark Streaming, la plataforma de tecnologías de procesado en tiempo real más popular del momento. A destacar su reciente evolución, desde una aproximación batch-first a una semántica más pura de streaming con las novedades de Continuous Processing recientemente introducidas en la API de Structured Streaming. Databricks es la compañía impulsando su adopción y liderando el desarrollo de todo el ecosistema Spark.

Descripción

Spark Streaming es una extensión de la API central de Spark que permite el procesamiento escalable, de alto rendimiento y con tolerancia a fallos de flujos de datos en streaming. Los datos pueden venir de muchas fuentes como Kafka, Flume, Kinesis o sockets TCP, y pueden procesarse utilizando complejos algoritmos expresados con funciones de alto nivel como map, reduce, join y window. Finalmente, los datos procesados pueden enviarse nuevamente a sistemas de colas, sistemas de archivos, bases de datos, o directamente a dashboards que se actualizan en tiempo real. De hecho, se puede aplicar machine learning de Spark y algoritmos de procesamiento de gráficos en flujos de datos.

Internamente, funciona de la siguiente manera: Spark Streaming recibe flujos de datos de entrada en streaming y divide los datos en lotes, que luego son procesados por el motor de Spark, como mini-procesos batch, para generar la secuencia final de resultados de nuevo en streaming.

En su API, Spark Streaming proporciona una abstracción de alto nivel llamada discretized stream o DStream, que representa un flujo continuo de datos. Internamente, un DStream se representa como una secuencia de RDD.

Actualmente, la API de DStream está en desuso en favor de la nueva API Structured Spak Streaming. Structured Spark Streaming es un interfaz basado en Spark SQL y, por lo tanto, reutiliza la abstracción de Dataframe también para el desarrollo de procesos de streaming. Es decir, la programación batch y streaming se unifican y puedes expresar un proceso streaming de la misma manera que harías en un proceso batch con un conjunto de datos finito.

Evaluación

Durante la fase de pruebas hicimos uso de la API de Spark Streaming en su versión 2.10 y pudimos comprobar la facilidad de encontrar ejemplos, tanto en la documentación (Spark Streaming o Structured Spark Streaming) como por aportaciones de su muy activa comunidad.

El caso de uso a implementar es el mismo que el resto de tecnologías de la serie. A continuación, estos son algunos ejemplos interesantes de la prueba:

Leer sobre Kafka

Procesamiento del mensaje

Guardar en Elasticsearch

Conclusión

Apache Spark Streaming es una elección estable, bien testeada y adecuada para aplicaciones streaming sin requisitos demasiado elevados de latencia y rendimiento. Structured Streaming en Spark 2.0+ resuelve algunas de las limitaciones del modelo. Y los problemas de latencia debido a un diseño basado en procesamiento de micro-batches se resolverán cuando el Continuous Processing esté completamente resuelto y integrado en la API de Structured Spark Streaming.

En definitiva, la popularidad de Spark Streaming está completamente justificada, ya que supone una muy buena base para trabajar con tecnologías streaming de forma segura y estable.