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

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

Primeros pasos hacia la creación de una canalización de procesamiento de macrodatos en tiempo real con Apache Kafka y Apache Flink con Scala: tema de Apache Kafka

En el artículo anterior presentamos el proyecto que estamos aprendiendo a construir. Ahora nos centraremos en Apache Kafka. Configuraremos un clúster de Kafka y aprenderemos a crear un tema. Discutiremos un par de maneras de completar este tema de Kafka.

Recuerde que la canalización tiene el siguiente aspecto:

Un poco de arquitectura kafkiana

Explicar la arquitectura de Kafka puede resultar complejo y demasiado teórico. En esta sección analizaremos brevemente lo poco kafkiano que necesitamos para construir este oleoducto.

Kafka es un marco de transmisión de eventos. Los eventos y los mensajes son dos palabras para lo mismo en este contexto. Los eventos se envían a los temas. Los temas no son más que una simple secuencia ordenada de eventos. Los temas se pueden particionar y replicar.

Los servidores o corredores de Kafka son responsables del registro de temas. Los corredores de Kafka se coordinan gracias al Zookeeper. El Zookeeper básicamente gestiona los servidores y los temas. Decimos que tenemos un clúster de Kafka cuando lanzamos corredores coordinados por Zookeeper.

Los productores son actores que escriben sobre temas. Los consumidores suelen leer sobre ellos. Esta configuración (simplificada) tendría un aspecto similar al siguiente:


Y eso es todo. Eso bastará con Kafka para empezar. Tenga en cuenta que esta explicación simplificó la arquitectura de Kafka mucho. Hay muchos recursos sobre esta interesante arquitectura. Una de nuestras entradas de blog favoritas para aprender sobre Kafka es este.

Configuración de un clúster local de Kafka

Lo primero que hay que hacer es instalar Scala y Kafka. Para instalar Scala, compruebe la sitio oficial de descargas de Scala. Queremos instalar Scala 2.13. Instalar Kafka es tan sencillo como descargar el archivo comprimido disponible en el Sitio de descargas de Apache Kafka. Para este esfuerzo, queremos la versión compatible con Scala 2.13. Además, Scala necesita Java 1.8 o superior para funcionar. Asegúrese de obtener un JDK adecuado.

Una vez que hayamos extraído los archivos comprimidos de Kafka, hay dos carpetas que vale la pena inspeccionar. La primera es basura. En esta carpeta hay un montón de .sh archivos (script de shell). Estos archivos se utilizarán para ejecutar nuestro Zookeeper y nuestro servidor, así como para administrar y consultar temas. Hay muchos scripts que no utilizaremos en este proyecto.

La segunda carpeta a la que debemos prestar atención es configuración. En esta carpeta podemos encontrar muchos archivos con .propiedades extensión. Estos archivos se utilizarán como argumentos para la ejecución de nuestros scripts de shell. Por ejemplo, podemos configurar allí el host y el puerto de nuestro servidor Zookeeper (zookeeper.properties) y Kafka (server.properties).

Lo primero para poner en marcha a Kafka es lanzar el Zookeeper. Dirígete a tu terminal favorita y cambia de directorio a tu directorio fuente de Kafka (el que descargamos hace unos momentos). Pon en marcha el Zookeeper ejecutando el siguiente comando:

no-line-numbers|bash./bin/zookeeper-server-start.sh ./config/zookeeper.properties

Deberíamos ver mucha información en la pantalla. ¡Así es como debería comportarse si el Zookeeper pudiera lanzarse correctamente!

El siguiente paso es crear un nodo intermediario, es decir, un servidor. Para ello, ejecute el siguiente comando en una nueva pestaña o ventana del terminal:

no-line-numbers|bash./bin/kafka-server-start.sh ./config/server.properties

Ahora estamos listos para crear un tema de Kafka y vincularlo al servidor que acabamos de crear. Como en nuestra pestaña anterior se ejecutaba nuestro corredor de Kafka, tenemos que crear una nueva.

no-line-numbers|bashkafka_2.13-3.1.0 % ./bin/kafka-topics.sh –create –topic flink-input –replication-factor 1 –bootstrap-server localhost:9092

Hemos llamado al tema «flink-input», lo hemos replicado solo una vez y lo hemos enlazado al servidor que hemos creado. Tenga en cuenta que el factor de replicación no puede superar el número de corredores (en este caso solo tenemos un corredor).

Rellenar y depurar el tema

En nuestra configuración local, experimentamos con una API REST basada en Spring Boot. La creación de una API RESTful escapa al alcance de este artículo. Para empezar a usar Kafka, le recomendamos que se acostumbre a los scripts que ofrece Kafka. Veamos ahora cómo rellenar y consultar un tema de Kafka usando una terminal.

Si vas a tu carpeta raíz de Apache Kafka, puedes ejecutar

. /bin/kafka-topics.sh —bootstrap-server=localhost:9092 —lista

Para ver tus temas de Kafka listados. Sería interesante escribir algunos mensajes sobre nuestro tema, ¿verdad? Intenta correr:

no-line-numbers|bashbin/kafka-console-producer.sh –topic flink-input –bootstrap-server localhost:9092

La consola pasará ahora al modo interactivo y cada línea que escribas se almacenará como un evento en tu tema de Kafka.

Intente consultar su tema ejecutando el siguiente comando:

no-line-numbers|bashbin/kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic flink-input –from-beginning

Podemos ver:

¡Nuestro clúster Kafka ya está en funcionamiento! Ya sabemos cómo usar las funciones básicas de Kafka. Bastante fácil, ¿verdad?

En la próxima entrada de esta serie de artículos continuaremos con Flink. Antes de continuar, ¿se te ocurre una implementación similar que utilice alguna otra tecnología que admita la transmisión de datos? ¿Qué ventajas y desventajas tendría en comparación con la implementación de Apache Kafka? Te dejaremos algunas ideas para que comiences:

¿Te perdiste alguno de nuestros artículos anteriores sobre este oleoducto? Échales un vistazo aquí:

Primeros pasos hacia la creación de una canalización de procesamiento de macrodatos en tiempo real con Apache Kafka y Apache Flink con Scala: tema de Apache Kafka

En el artículo anterior presentamos el proyecto que estamos aprendiendo a construir. Ahora nos centraremos en Apache Kafka. Configuraremos un clúster de Kafka y aprenderemos a crear un tema. Discutiremos un par de maneras de completar este tema de Kafka.

Recuerde que la canalización tiene el siguiente aspecto:

Un poco de arquitectura kafkiana

Explicar la arquitectura de Kafka puede resultar complejo y demasiado teórico. En esta sección analizaremos brevemente lo poco kafkiano que necesitamos para construir este oleoducto.

Kafka es un marco de transmisión de eventos. Los eventos y los mensajes son dos palabras para lo mismo en este contexto. Los eventos se envían a los temas. Los temas no son más que una simple secuencia ordenada de eventos. Los temas se pueden particionar y replicar.

Los servidores o corredores de Kafka son responsables del registro de temas. Los corredores de Kafka se coordinan gracias al Zookeeper. El Zookeeper básicamente gestiona los servidores y los temas. Decimos que tenemos un clúster de Kafka cuando lanzamos corredores coordinados por Zookeeper.

Los productores son actores que escriben sobre temas. Los consumidores suelen leer sobre ellos. Esta configuración (simplificada) tendría un aspecto similar al siguiente:


Y eso es todo. Eso bastará con Kafka para empezar. Tenga en cuenta que esta explicación simplificó la arquitectura de Kafka mucho. Hay muchos recursos sobre esta interesante arquitectura. Una de nuestras entradas de blog favoritas para aprender sobre Kafka es este.

Configuración de un clúster local de Kafka

Lo primero que hay que hacer es instalar Scala y Kafka. Para instalar Scala, compruebe la sitio oficial de descargas de Scala. Queremos instalar Scala 2.13. Instalar Kafka es tan sencillo como descargar el archivo comprimido disponible en el Sitio de descargas de Apache Kafka. Para este esfuerzo, queremos la versión compatible con Scala 2.13. Además, Scala necesita Java 1.8 o superior para funcionar. Asegúrese de obtener un JDK adecuado.

Una vez que hayamos extraído los archivos comprimidos de Kafka, hay dos carpetas que vale la pena inspeccionar. La primera es basura. En esta carpeta hay un montón de .sh archivos (script de shell). Estos archivos se utilizarán para ejecutar nuestro Zookeeper y nuestro servidor, así como para administrar y consultar temas. Hay muchos scripts que no utilizaremos en este proyecto.

La segunda carpeta a la que debemos prestar atención es configuración. En esta carpeta podemos encontrar muchos archivos con .propiedades extensión. Estos archivos se utilizarán como argumentos para la ejecución de nuestros scripts de shell. Por ejemplo, podemos configurar allí el host y el puerto de nuestro servidor Zookeeper (zookeeper.properties) y Kafka (server.properties).

Lo primero para poner en marcha a Kafka es lanzar el Zookeeper. Dirígete a tu terminal favorita y cambia de directorio a tu directorio fuente de Kafka (el que descargamos hace unos momentos). Pon en marcha el Zookeeper ejecutando el siguiente comando:

no-line-numbers|bash./bin/zookeeper-server-start.sh ./config/zookeeper.properties

Deberíamos ver mucha información en la pantalla. ¡Así es como debería comportarse si el Zookeeper pudiera lanzarse correctamente!

El siguiente paso es crear un nodo intermediario, es decir, un servidor. Para ello, ejecute el siguiente comando en una nueva pestaña o ventana del terminal:

no-line-numbers|bash./bin/kafka-server-start.sh ./config/server.properties

Ahora estamos listos para crear un tema de Kafka y vincularlo al servidor que acabamos de crear. Como en nuestra pestaña anterior se ejecutaba nuestro corredor de Kafka, tenemos que crear una nueva.

no-line-numbers|bashkafka_2.13-3.1.0 % ./bin/kafka-topics.sh –create –topic flink-input –replication-factor 1 –bootstrap-server localhost:9092

Hemos llamado al tema «flink-input», lo hemos replicado solo una vez y lo hemos enlazado al servidor que hemos creado. Tenga en cuenta que el factor de replicación no puede superar el número de corredores (en este caso solo tenemos un corredor).

Rellenar y depurar el tema

En nuestra configuración local, experimentamos con una API REST basada en Spring Boot. La creación de una API RESTful escapa al alcance de este artículo. Para empezar a usar Kafka, le recomendamos que se acostumbre a los scripts que ofrece Kafka. Veamos ahora cómo rellenar y consultar un tema de Kafka usando una terminal.

Si vas a tu carpeta raíz de Apache Kafka, puedes ejecutar

. /bin/kafka-topics.sh —bootstrap-server=localhost:9092 —lista

Para ver tus temas de Kafka listados. Sería interesante escribir algunos mensajes sobre nuestro tema, ¿verdad? Intenta correr:

no-line-numbers|bashbin/kafka-console-producer.sh –topic flink-input –bootstrap-server localhost:9092

La consola pasará ahora al modo interactivo y cada línea que escribas se almacenará como un evento en tu tema de Kafka.

Intente consultar su tema ejecutando el siguiente comando:

no-line-numbers|bashbin/kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic flink-input –from-beginning

Podemos ver:

¡Nuestro clúster Kafka ya está en funcionamiento! Ya sabemos cómo usar las funciones básicas de Kafka. Bastante fácil, ¿verdad?

En la próxima entrada de esta serie de artículos continuaremos con Flink. Antes de continuar, ¿se te ocurre una implementación similar que utilice alguna otra tecnología que admita la transmisión de datos? ¿Qué ventajas y desventajas tendría en comparación con la implementación de Apache Kafka? Te dejaremos algunas ideas para que comiences:

¿Te perdiste alguno de nuestros artículos anteriores sobre este oleoducto? Échales un vistazo aquí: