Kafka Streams… WOW!

“Lo que realmente me sedujo fue la idea de tratar la información como un flujo continuo de eventos que poder procesar en lugar de tratarlos como eventos separados.”

Recuerdo cuando hace años empecé a coquetear con Kafka y todo su universo. Aquello me pareció un paso muy interesante en la implementación de sistemas. Hasta entonces había conocido los eventos en el planeta front-end: cuando clicas aquí, generas un evento que ejecuta una acción…

Kafka, de la mano de confluent.io, trajo, de una forma asequible, aquel paradigma al mundo back-end con todas las ventajas de tener eventos y poder manejarlos. Aquello dio alas a las arquitecturas basadas en eventos y llenó nuestras cabezas, y también algunos de nuestros proyectos, de productores y consumidores.

Si aquello me pareció un paso muy importante, lo que realmente me sedujo fue la idea de tratar la información como un flujo continuo de eventos que poder procesar en lugar de tratarlos como eventos separados. Me imaginé entonces aquel escenario, no como un grifo que gotea (productor) bajo el que vamos poniendo cuencos y vasos (consumidores) sino como todo un conjunto de grifos abiertos de par en par y distintas cañerías llevando esa agua distintos jardines según nuestros intereses.

Aunque la idea de este artículo no es la de entrar de forma detallada en Kafka Streams, sí me gustaría hacer un repaso, aunque sea a vista de pájaro (o a vista de Google Earth, según el nivel de friquismo de cada uno) de esta librería. Podríamos decir que Kafka Streams es una biblioteca Open Source, que facilita la construcción de aplicaciones para procesar flujos de datos utilizando Apache Kafka como sistema de almacenamiento de datos de entrada y de salida. Dicho de otro modo, una librería que nos permite procesar flujos de datos en tiempo real.

Las aplicaciones que desarrollemos con Kafka Streams podrán así, realizar procesamiento en streaming, es decir, podrán procesar los datos de forma continua, tan pronto como estén disponibles para su análisis. De esta forma, se procesa de manera secuencial sobre flujos de datos sin límites temporales. Pero,Kafka Streams no solo permite el procesado de dato de entrada, sino también nos permite la escritura de resultados procesados en otros topics o en otros almacenamientos externos, como decía antes, distintas cañerías llevando esa agua distintos jardines según nuestros intereses.

Pero mientras un productor Kafka sólo publica datos en un topic y un consumidor únicamente consume datos de topics, las aplicaciones Kafka Streams pueden utilizar uno o varios topics como entrada, realizar algún tipo de transformación o procesado de esos datos y dejar el resultado como salida en otro u otros topics. Esto lo hace apoyándose en conceptos como Topolgías, KStreams y KTables. Entendiendo la topologías como grafos de procesamiento que definen la lógica de cómo los eventos fluyen, de ahí el nombre, son como mapas topográficos que construyes para describir las transformaciones que quieres aplicar a los eventos de entrada. Mientras que los KStreams y las KTables son distintas formas de moldear los datos, cuya diferencia principal es que los objetos tipo KTables si guardan un estado mientras que KStreams no. Os recomiendo que os leáis el libro “Real-time Stream Processing” de Prashant Kumar Pandey, publicado por Gopalan Atlantis, donde explica con ejemplos todos estos conceptos y de una manera infinitamente mejor de lo que yo pueda describirlos.

He comentado lo útil que puede ser Kafka Streams en escenarios donde se requiere tomar decisiones rápidas basadas en los datos más recientes. Pero donde, a mi modo de ver, tiene más fuerza es en la transformación de datos, ya que es muy útil para realizar filtrados, mapeos y agregaciones en tiempo real, antes de almacenarlos o enviarlos a otros sistemas.

Imaginemos que tenemos que lanzar un listado que necesita leer de varias tablas que se han ido generando a lo largo de un día entero. Obtener los datos, procesarlos y generar el listado puede ser muy costoso, sobre todo si el volumen de datos acumulado durante ese día es especialmente grande. Con Kafka Streams y con la ayuda del patrón Change Data Capture o CDC (del que me guardo la idea para un próximo artículo), podemos avanzar en ese procesamiento a la vez que se van generando los datos y la información, haciendo que la generación de este tipo de listados no sea tan pesada.

En fin, espero que después de leer este artículo se os haya despertado el gusanillo por esta librería. Y si os preguntáis el porqué de las letras WOW en el título, el motivo no es otro que poner de una forma más o menos elegante y moderna, lo que mi boca exclamó cuando vi el potencial de esta librería.

Muchas gracias por leerme.

Bibliografía:

Tags

Guía de posibilidades profesionales sobre Java
He leído y acepto la política de privacidad
Acepto recibir emails sobre actividades de recruiting NTT DATA