Creación de una canalización de procesamiento de big data — Capítulo 1

Juan Irabedra
.
July 27, 2022
Creación de una canalización de procesamiento de big data — Capítulo 1

Primeros pasos para construir una canalización de procesamiento de big data en tiempo real con Apache Kafka y Apache Flink con Scala: el proyecto

Todas las empresas pueden aprovechar los datos. Un desafío importante para las organizaciones es diseñar sistemas potentes que puedan transformar los datos en decisiones estratégicas lo más rápido posible. La verdad es que las grandes cantidades de datos pueden resultar abrumadoras.

En este artículo presentaremos dos tecnologías modernas que pueden servir de aliadas a la hora de procesar grandes volúmenes de datos en tiempo real: Apache Flink y Apache Kafka.

A través de una serie de artículos construiremos un pipeline que sirva de base para muchas aplicaciones interesantes, por ejemplo:

¡Y muchos más!

¿Por qué Apache Flink?

Apache Spark es un marco de código abierto probado y verdadero que permite el procesamiento de datos casi en tiempo real. A pesar de que Spark es una opción popular entre los desarrolladores de big data, Apache Flink se está convirtiendo en una de las principales tecnologías para un nicho en particular: el procesamiento en tiempo real.

A diferencia de Flink, Apache Spark no ofrece procesamiento de streaming nativo. Spark utiliza el procesamiento por microlotes, que puede simular en tiempo real, pero su latencia es ligeramente superior a la de Flink. Además, la optimización del trabajo de Flink se realiza automáticamente. No hay necesidad de vigilar las retransmisiones, etc.

¿Por qué Apache Kafka?

Muchas implementaciones de software actúan como intermediarios de mensajes. Cada una tiene sus propias ventajas y casos de uso. Algunos ofrecen una integración sencilla, mientras que otros pueden ofrecer, por ejemplo, solidez.

Uno de los intermediarios de mensajes más populares es RabbitMQ, que puede servir como una fuente confiable de transmisión de mensajes en muchos casos de uso. Cuando se trata de aplicaciones de big data, hay que garantizar algunas propiedades, y ese no es exactamente el caso de RabbitMQ. Algunas de estas propiedades son la tolerancia a las particiones, el alto rendimiento, la escalabilidad horizontal y la fuerte redundancia. Esto convierte a Kafka en un candidato ideal para el procesamiento de macrodatos en tiempo real.

¿Por qué Scala?

Scala es un lenguaje de rápido crecimiento que combina lo mejor del paradigma de programación orientado a objetos con lo mejor de los lenguajes de programación funcionales. Es increíblemente versátil, conciso y con un rendimiento considerable. Scala se compila en código de bytes de Java, que finalmente es ejecutado por la JVM.

Spark convirtió a Scala en uno de los principales lenguajes de programación para aplicaciones de big data. Ten en cuenta que Scala es el lenguaje con mejor rendimiento para Spark. Este hecho hizo que el ecosistema de big data prestara atención a Scala no solo como un lenguaje elegante, sino también como un lenguaje eficaz. Además, tanto Flink como Kafka se escribieron en Scala (además de en Java).

El proyecto

Analizaremos brevemente cómo construir una canalización de procesamiento corta en tiempo real con 2 módulos principales. El siguiente diagrama muestra los componentes principales y cómo deben interactuar.

El primer componente es una API REST de Spring Boot. Esta API expone un punto final que acepta solicitudes HTTP Post. El cuerpo de estas solicitudes puede ser la serialización de cualquier objeto (JSON, ProtoBuf, XML, etc.). En este ejemplo, el punto final esperará que un objeto JSON que contenga el tema de Kafka en el que publicar el mensaje, la clave del mensaje de Kafka y el valor del mensaje de Kafka.

El segundo elemento implicado en el oleoducto es un tema de Kafka. Este tema servirá de intercambio de mensajes. Para simplificar, la configuración de Kafka para este ejemplo estará en modo autónomo local.

El tercer elemento es un trabajo de Flink, que se ejecutará en un clúster local en modo independiente. El trabajo de Flink es responsable de suscribirse al tema de Kafka como consumidor. Procesará los mensajes y los enviará a una tabla de Cassandra que se ejecute en un contenedor Docker.

Finalmente, como se mencionó anteriormente, tenemos una tabla de Cassandra dentro de un espacio de claves. Cassandra es una base de datos distribuida de NoSQL. Es un candidato ideal para aplicaciones que necesitan un factor de replicación manejable para los datos.

Cubriremos la configuración de Kafka, Flink y Cassandra. El productor de temas de Kafka puede ser cualquier aplicación compatible con una fuente de Kafka, o el propio guion del productor de la consola Kafka.

Esta configuración se puede alojar con bastante facilidad en la nube, pero en este artículo hemos optado por ejecutar todo de forma local para retratar mejor lo que sucede entre bastidores. Creamos un proceso similar con un espacio de claves de Cassandra administrado y hospedado en AWS Keyspaces. Como Flink no permite la personalización del nivel de coherencia para las tuplas de Scala, la versión en la nube de esta canalización utilizó el conector Cassandra Flink para Java a fin de eliminar los POJO.

En los próximos artículos, construiremos los componentes involucrados en la tubería. En aras de la simplicidad, este ejemplo abordará una configuración local, empezando por Kafka.

¡Estén atentos para recibir más artículos sobre tecnologías y prácticas de primer nivel relacionadas con el aprovechamiento máximo de sus datos!

Primeros pasos para construir una canalización de procesamiento de big data en tiempo real con Apache Kafka y Apache Flink con Scala: el proyecto

Todas las empresas pueden aprovechar los datos. Un desafío importante para las organizaciones es diseñar sistemas potentes que puedan transformar los datos en decisiones estratégicas lo más rápido posible. La verdad es que las grandes cantidades de datos pueden resultar abrumadoras.

En este artículo presentaremos dos tecnologías modernas que pueden servir de aliadas a la hora de procesar grandes volúmenes de datos en tiempo real: Apache Flink y Apache Kafka.

A través de una serie de artículos construiremos un pipeline que sirva de base para muchas aplicaciones interesantes, por ejemplo:

¡Y muchos más!

¿Por qué Apache Flink?

Apache Spark es un marco de código abierto probado y verdadero que permite el procesamiento de datos casi en tiempo real. A pesar de que Spark es una opción popular entre los desarrolladores de big data, Apache Flink se está convirtiendo en una de las principales tecnologías para un nicho en particular: el procesamiento en tiempo real.

A diferencia de Flink, Apache Spark no ofrece procesamiento de streaming nativo. Spark utiliza el procesamiento por microlotes, que puede simular en tiempo real, pero su latencia es ligeramente superior a la de Flink. Además, la optimización del trabajo de Flink se realiza automáticamente. No hay necesidad de vigilar las retransmisiones, etc.

¿Por qué Apache Kafka?

Muchas implementaciones de software actúan como intermediarios de mensajes. Cada una tiene sus propias ventajas y casos de uso. Algunos ofrecen una integración sencilla, mientras que otros pueden ofrecer, por ejemplo, solidez.

Uno de los intermediarios de mensajes más populares es RabbitMQ, que puede servir como una fuente confiable de transmisión de mensajes en muchos casos de uso. Cuando se trata de aplicaciones de big data, hay que garantizar algunas propiedades, y ese no es exactamente el caso de RabbitMQ. Algunas de estas propiedades son la tolerancia a las particiones, el alto rendimiento, la escalabilidad horizontal y la fuerte redundancia. Esto convierte a Kafka en un candidato ideal para el procesamiento de macrodatos en tiempo real.

¿Por qué Scala?

Scala es un lenguaje de rápido crecimiento que combina lo mejor del paradigma de programación orientado a objetos con lo mejor de los lenguajes de programación funcionales. Es increíblemente versátil, conciso y con un rendimiento considerable. Scala se compila en código de bytes de Java, que finalmente es ejecutado por la JVM.

Spark convirtió a Scala en uno de los principales lenguajes de programación para aplicaciones de big data. Ten en cuenta que Scala es el lenguaje con mejor rendimiento para Spark. Este hecho hizo que el ecosistema de big data prestara atención a Scala no solo como un lenguaje elegante, sino también como un lenguaje eficaz. Además, tanto Flink como Kafka se escribieron en Scala (además de en Java).

El proyecto

Analizaremos brevemente cómo construir una canalización de procesamiento corta en tiempo real con 2 módulos principales. El siguiente diagrama muestra los componentes principales y cómo deben interactuar.

El primer componente es una API REST de Spring Boot. Esta API expone un punto final que acepta solicitudes HTTP Post. El cuerpo de estas solicitudes puede ser la serialización de cualquier objeto (JSON, ProtoBuf, XML, etc.). En este ejemplo, el punto final esperará que un objeto JSON que contenga el tema de Kafka en el que publicar el mensaje, la clave del mensaje de Kafka y el valor del mensaje de Kafka.

El segundo elemento implicado en el oleoducto es un tema de Kafka. Este tema servirá de intercambio de mensajes. Para simplificar, la configuración de Kafka para este ejemplo estará en modo autónomo local.

El tercer elemento es un trabajo de Flink, que se ejecutará en un clúster local en modo independiente. El trabajo de Flink es responsable de suscribirse al tema de Kafka como consumidor. Procesará los mensajes y los enviará a una tabla de Cassandra que se ejecute en un contenedor Docker.

Finalmente, como se mencionó anteriormente, tenemos una tabla de Cassandra dentro de un espacio de claves. Cassandra es una base de datos distribuida de NoSQL. Es un candidato ideal para aplicaciones que necesitan un factor de replicación manejable para los datos.

Cubriremos la configuración de Kafka, Flink y Cassandra. El productor de temas de Kafka puede ser cualquier aplicación compatible con una fuente de Kafka, o el propio guion del productor de la consola Kafka.

Esta configuración se puede alojar con bastante facilidad en la nube, pero en este artículo hemos optado por ejecutar todo de forma local para retratar mejor lo que sucede entre bastidores. Creamos un proceso similar con un espacio de claves de Cassandra administrado y hospedado en AWS Keyspaces. Como Flink no permite la personalización del nivel de coherencia para las tuplas de Scala, la versión en la nube de esta canalización utilizó el conector Cassandra Flink para Java a fin de eliminar los POJO.

En los próximos artículos, construiremos los componentes involucrados en la tubería. En aras de la simplicidad, este ejemplo abordará una configuración local, empezando por Kafka.

¡Estén atentos para recibir más artículos sobre tecnologías y prácticas de primer nivel relacionadas con el aprovechamiento máximo de sus datos!