Evaluación y prueba de concepto de tecnologías de procesado en streaming y tiempo real (II)

Las tecnologías streaming son uno de los temas candentes en la gestión y procesamiento de grandes volúmenes de datos y se están convirtiendo en un valor al alza en el mundo del Big Data. Por ese motivo continuamos la evaluación de estas herramientas y las implantamos de forma práctica para analizar el rendimiento de estas tecnologías y sus resultados reales. En el post anterior evaluamos la parte teórica de estas herramientas y explicamos de forma básica el paradigma del streaming. Ahora toca pasar de esa primera evaluación a una que nos dé respuestas reales sobre el funcionamiento y el potencial de las tecnologías streaming.

Para analizarlo, hemos desarrollado una prueba de concepto que recopile conocimientos prácticos sobre algunas de las tecnologías más interesantes que se vieron en la evaluación teórica del primer artículo de la serie. En este artículo compartiremos los resultados de este trabajo práctico. Las secciones incluyen:

  • Una tabla con las conclusiones obtenidas a partir de nuestra propia experiencia durante el desarrollo de la prueba de concepto explicada a continuación.
  • Una hoja de referencia rápida sobre tecnologías de streaming, tanto para facilitar la tarea a la hora de elegir una tecnología u otra, como para proporcionar a los desarrolladores una idea inicial sobre todas ellas.
  • Un análisis de las tendencias, ya que éstas también son relevantes como medida de popularidad, interés y apoyo a la tecnología, factores muy importante a la hora de hacer una inversión tecnológica.

Diseño de la prueba de concepto

El caso de uso de la prueba de concepto consiste en enriquecer un flujo continuo de transacciones bancarias aplicando unas reglas de negocio sencillas. Caso de uso que se implementará en diferentes tecnologías y que servirá para poder hacer la evaluación con un caso práctico.

En concreto, un generador de datos sintéticos publicará transacciones bancarias en Kafka, una cola de mensajes con patrón publicación-suscripción masivamente escalable y que sirve para desacoplar los productores de los consumidores. A partir de aquí, el consumidor o consumidores obtendrán las transacciones directamente de Kafka y enriquecerán estas transacciones aplicando una regla de negocio sencilla que consiste en asignar una campaña de márketing. Una vez enriquecidos, estos datos se insertarán en ElasticSearch, sistema que permite consultas de baja latencia para la explotación y ejecución de dichas campañas. Estos consumidores se implementarán en cada una de las tecnologías seleccionadas en la prueba de concepto.

Panorama de herramientas de streaming

Como mencionábamos antes, existen muchas herramientas de streaming. Hemos realizado una evaluación teórica de las siguientes:

  • Apache Spark Streaming
  • Apache Apex
  • Apache Beam
  • Apache Flink
  • Apache Kafka Streams
  • Akka Streams

Para consultar la descripción de estas herramientas clica aquí.

Tabla de evaluación

En la tabla siguiente se muestran las conclusiones del trabajo preliminar en la prueba de concepto.

Comentarios

 

 

Hoja de referencia rápida

Más abajo se expone una hoja de referencia rápida que puede servir de ayuda a los desarrolladores, como muestra de cada framework, y a los arquitectos, para conocer las características principales de cada herramienta.

Tendencias

Una manera de comparar la popularidad de las diferentes tecnologías y su impulso es realizar búsquedas comparativas en Google Trends.

Campeón de popularidad: Spark Streaming

Los gráficos muestran que, en términos de popularidad, hay un campeón claro en el campo y un grupo de competidores de mayor o menor nivel.

Los competidores en el punto de mira

Si nos concentramos en el ámbito de los competidores, sin tener en cuenta a Spark Streaming, se pueden comparar mejor los otros cinco frameworks de streaming.

Se puede apreciar que Flink fue el líder del sector en 2016, pero Apache Beam y Kafka Streams le están ganando terreno en 2017, creando una situación de empate en los tres primeros puestos. Akka Streams también está creciendo, mientras que Apex permanece estable en quinto lugar.

Conclusiones

El número de tecnologías existentes de procesamiento de tiempo real y streaming es alto y sigue creciendo. Además, el solapamiento en cuanto a las funcionalidades que ofrecen es considerable. Por lo tanto, en muy raras ocasiones tendremos que usar varias de ellas y lo lógico es hacer un análisis previo para hacer una elección inicial. En esta sección se ofrecen conclusiones para dicho análisis procedentes tanto de la evaluación teórica como práctica.

Si ya utilizas o tienes la intención de utilizar Spark para consultas SQL interactivas, machine learning o trabajos por lotes, Spark Streaming es una buena elección que cubre una amplia gama de problemas y que permite compartir lógica entre las aplicaciones de streaming y lotes. Si necesitas la semántica sofisticada y la baja latencia que ofrece Beam, usa la API de Beam con Flink, Apex o Gearpump como runner, o bien utiliza directamente las APIs nativas de Flink, Apex o Gearpump. Beam es, sin duda, un buen sistema para la iniciación. Así que aunque no necesites a priori la semántica de Beam y no haces uso ya de ninguna de las otras tecnologías, echa un vistazo a las prestaciones de Beam. Por otro lado, si ya tienes un clúster YARN, podría resultarte útil una herramienta que pueda funcionar con YARN.

Mientras que la versión 1.x de Spark Streaming está limitada a procesamiento basado en microlotes, el Structured Spark Streaming de la versión 2.0 constituye el primer paso en la evolución hacia un motor de streaming de baja latencia con soporte total a una semántica basada en eventos individuales. Aunque Spark 2.0 sigue utilizando minilotes internamente, la API ya apunta al nuevo diseño y, entre otras cosas, se han añadido características como el soporte de event time. Un objetivo importante del proyecto Spark es promover las llamadas aplicaciones continuas, en las que la división entre el procesamiento de lotes y flujos se ha reducido aún más. El proyecto también pretende simplificar escenarios comunes en los que se integran otros servicios con flujos de datos. Actualmente, Spark Streaming ofrece la ventaja de que permite procesos muy ricos, muy escalables y con muchos recursos, como el entrenamiento de modelos de machine learning, cuando las latencias más largas de los minilotes son tolerables. En cuanto a la integración de Spark con Beam, Cloudera está tratando de posibilitar que dicho soporte pase por una implementación de runner con la nueva versión de Structured Spark Streaming.

Flink, Apex y Gearpump están persiguiendo enérgicamente la manera de ejecutar flujos de datos Beam y proporcionan funcionalidad similar. Aunque Flink es más conocida, Apex también es una herramienta madura y probada, y cuenta con una empresa detrás dando soporte, aunque con dificultades para generar tendencia. Gearpump se integra mejor con Akka y Akka Streams. Por ejemplo, Gearpump puede materializar Akka Streams (el equivalente de ser un runner de Beam) en una configuración distribuida no soportada nativamente por Akka. Apex se centra en crear una biblioteca de operadores (unidades de funcionalidad), por lo que, si estás creando una aplicación algo compleja, podría resultarte útil si reutilizas la funcionalidad ya proporcionada por la biblioteca de operadores de Apex, Apache Malhar.

Kafka Streams y Akka Streams no están diseñadas para contar con tantas características como los sistemas compatibles con Beam, pero ambas proporcionan la latencia y la carga de trabajo más bajas. Están menos orientadas a generar servicios de análisis complejos y más a crear microservicios generales a través de flujos de datos. Así, ofrecen procesamiento de eventos con una latencia muy baja y una productividad alta. También disponen de operaciones de agregación tales como grouping o joins. En cuanto a Akka y Akka Streams, también son excelentes para implementar escenarios de procesamiento de eventos complejos (CEP), como transiciones de estado de ciclo de vida, disparos de alarmas de determinados eventos, etc. Akka forma parte de la Reactive Platform de Lightbend, que se centra más en crear microservicios. Por lo tanto, Akka Streams es una buena elección para integrar una amplia variedad de servicios en un sistema de procesamiento de datos. Usa Akka Streams para implementar e integrar más microservicios generales y una gran variedad de herramientas y productos, con opciones flexibles para los protocolos de comunicación además de REST, como Aeron, y especialmente aquellos que soportan la especificación Reactive Streams, un nuevo estándar para comunicaciones asíncronas. Podrías emplear Gearpump como materializador para Akka Streams y así disponer de más opciones de despliegue. Akka Streams también soporta la construcción de gráficos complejos de flujos para flujos de datos sofisticados, aunque carece de una capacidad de clustering integrada. Otros usos recomendados son el procesamiento de baja latencia (similar al de Kafka Streams), como el filtrado y la transformación ETL, así como la señalización de alarmas y sesiones con control de estado bidireccionales, como las interacciones con dispositivos IoT.

Kafka Streams ejecuta una biblioteca sobre el clúster Kafka, por lo que no requiere ninguna configuración adicional de clúster. En caso de utilizar Kafka, la colocación estratégica de Kafka Streams sobre Kafka elimina los gastos generales de red. Por lo tanto, puedes usar Kafka Streams para un procesamiento con gastos generales bajos que no requiera la sofisticación ni la flexibilidad que ofrecen las demás herramientas. Las tareas de ETL, como el filtrado, la transformación y muchas tareas de agregación, son ideales para Kafka Streams. Además, podría interesarte echarle un vistazo a la nueva KSQL, que permite el procesamiento de datos en streaming utilizando un lenguaje declarativo como SQL.

Más información

Para obtener más información teórica sobre el tema, consulta el primer artículo de la serie o contacta con nosotros. Estaremos encantados de atenderte.

En los próximos meses, desde el centro de competencia de Data de GFT publicaremos posts sobre las experiencias con las diferentes tecnologías que hemos presentado en este artículo. ¡No te pierdas las novedades!

Participantes y colaboradores de la serie de evaluación de tecnologías de streaming y tiempo real: Ignacio Asín, Roberto López, Sara Reig, Ignacio Estrada, Jordi Rodríguez y Diego Campo. ¡Gracias a todos!

GreenCoding

Con GreenCoding el desarrollo de software se convierte en parte integrante de tu programa de sostenibilidad

Más información