Vuela con tus datos usando Apache Flink

La mayor parte de la información que se produce hoy en día se hace de forma continua (sensores, transacciones, interacciones, actividad de usuarios…). Dar una respuesta rápida al procesamiento Big Data se está convirtiendo en algo cada vez más importante.

La forma más común de analizar toda esta información es la de persistirla en un almacenamiento estable (HDFS, DBMS…) para posteriormente analizarla periódicamente mediante procesamiento por lotes (Batch).

La característica principal que aportan los motores de procesamiento en streaming es que son capaces de analizar esta información conforme va llegando. Consideramos tiempo real al procesamiento en streaming de datos en el mínimo tiempo posible para hacer una analitica de la información procesada.

Entre estas nuevas herramientas que han surgido destacan Samza (desarrollada por LinkedIn), Storm o Flink. Este artículo se va a centrar en explicar qué está detrás de Flink, cómo y dónde surgió, y cómo podemos usarlo en proyectos que requieran tiempos de respuesta menores.

¿Cuáles son los orígenes de Flink?

El proyecto Flink comenzó como una colaboración de varias universidades europeas en un proyecto de investigación llamado “Stratosphere: Information Management on the Cloud”. Flink es un fork de este proyecto y fue en marzo de 2014 cuando pasó a formar parte de Apache Incubator. Diciembre de 2014 fue una fecha clave en  este proyecto porque fue aceptado como Top-Level project de Apache. Hoy en día el framework está soportado y desarrollado por la start-up Data Artisans.

Apache Flink es una plataforma de código abierto para el procesamiento en streaming de datos escalables y procesamiento por lotes. Apache Flink no es otro framework análitico más para Big Data. Su diseño incluye muchas innovaciones técnicas y una visión diferente  que lo distingue de los demás.

¿Por qué usar Flink?

El diseño original de Flink se basa en conceptos de MapReduce, MPP Database (Massively Parallel Processing) y sistemas de flujo de datos. Flink puede trabajar de forma independiente de tecnologías existentes como Hadoop, pero puede ejecutarse por encima de HDFS y YARN.  

Así, el procesamiento en streaming permite simplificar la infraestructura, minimizando el número de componentes que deben ser mantenidos y orquestados en nuestra arquitectura.

Apache Flink incorpora las siguientes características principales:

  • Baja latencia (resultados en milisegundos).
  • Alto throughput (millones de eventos por segundo).
  • Consistencia (resultado correcto en caso de errores).
  • Tolerancia a fallos a través de un sistema de snapshots distribuidos.
  • Eventos desordenados (procesamiento de eventos en función de un tiempo asociado).
  • Sistema de ventanas de streaming muy flexible.
  • Un único sistema para procesar batch y streaming.
  • APIs intuitivas multilenguaje (Scala, Python y Java) similares a las del modelo batch.

Los sistemas anteriores habían enfocado el problema del procesamiento en streaming de una manera diferente. Apache Storm fue pionero en tiempo real utilizando los procesos como  Streaming Puro, hizo para el procesamiento en tiempo real lo que Hadoop hizo para el procesamiento por lotes.

Apache Spark encontró una forma inteligente de hacer tiempo real usando una aproximación mediante micro-batching. Apache Flink consigue streaming puro implementando características como procesamiento en memoria, soporte nativo para iteraciones, optimización automática de procesos y soporte avanzado de ventanas de tiempo. La siguiente gráfica muestra las mejoras de rendimiento con respecto a Apache Storm:

¿Cómo de diferente es el uso de Micro-Batching y Streaming puro? Con Streaming puro las entradas llegan como registros en una secuencia única y la salida es necesaria tan rápido como sea posible. Con micro-batching la entrada se divide en lotes (batches) por número de registros o tiempo.

Casos de Uso

Después de ver todas las características de Flink, ¿para qué tipo de proyectos encaja? ¿cómo podríamos usarlo en nuestros proyectos? ¿cómo podemos sacar el mayor rendimiento? Por ejemplo, podemos implementar sistemas distribuidos eficientes que respondan rápidamente a preguntas computacionalmente complejas (machine learning, estadísticas…), implementar procesos de limpieza y pre-filtrado sobre cantidades ingentes de información, detectar anomalías e implementar sistemas tiempo real de monitorización o alertas, proyectos de IOT, etc.

Conclusiones

¿Necesitas tiempo de respuesta muy rápidos o mostrar datos en tiempo real? Quizás las herramientas basadas en micro-batching no se ajusten a tus necesidades. Flink nos ofrece una nueva forma de procesar en tiempo real para obtener una salida más instantánea.

Sin duda Flink va a ser una tecnología relevante en el mundo Big Data a medio plazo. Ha aportado un nuevo enfoque para el procesado en tiempo real y su propuesta innovadora va a ser muy interesante para casos de uso donde el real time sea un factor decisivo.

Actualmente trabaja en Paradigma Digital como Arquitecto de Software. Con varios años de experiencia en el mundo del desarrollo, siempre tuvo claro que se dedicaría a este mundo y mantiene intacta la ilusión de aprender cosas nuevas. Está enfocado en trabajar en sistemas de alto rendimiento con arquitecturas distribuidas y escalables. Le interesa todo lo relacionado con Big Data, Cloud o IoT, así como tecnologías Open Source.

Ver toda la actividad de José Ignacio Díez

Manuel Zaforas es Ingeniero Superior en Informática por la UPM. Está interesado en HPC, IoT, Cloud, NoSQL, Big Data, Data Science, Machine Learning y Agile. Apoya activamente la implantación de software libre, la calidad en los procesos de desarrollo de software a través de la mejora continua y la innovación en las metodologías de desarrollo y gestión de equipos. Actualmente trabaja en Paradigma como Scrum Master y Arquitecto Software.

Ver toda la actividad de Manuel Zaforas

Escribe un comentario