En el artículo anterior nos centramos en empezar con Apache Kafka. Ahora nos centraremos en Apache Flink: la tecnología principal de la que disponemos. Configuraremos un clúster de Flink y aprenderemos a crear y enviar una aplicación. También veremos rápidamente algunas herramientas de Scala y Scala necesarias para crear esta aplicación de forma adecuada.
Recuerde que la canalización tiene el siguiente aspecto:
De manera similar a lo que ocurrió con Kafka, la arquitectura de Flink debe explicarse en detalle. Dado que el propósito de esta guía es mostrar una configuración fácil y rápida para empezar a usar Flink, solo mencionaremos el gestor de tareas y los gestores de tareas.
El administrador de trabajos es el proceso responsable de coordinar la ejecución de las solicitudes. En particular, las aplicaciones distribuidas. Programa los trabajos, media el acceso a los recursos, reacciona ante eventos críticos (como la falla de un nodo), etc.
Los administradores de tareas son responsables de las operaciones reales con los datos. Tienen ranuras, que son los anfitriones para el procesamiento real.
Hay mucho más en Flink. No esperamos más que una comprensión intuitiva de su arquitectura. Flink tiene una documentación excelente sobre su arquitectura, ¡y es una lectura recomendada! ¡Compruébalo aquí.
Vale la pena mencionar que Flink 1.15.0 se ejecuta en Scala 2.12. Podemos configurar la versión que usa nuestra aplicación con SBT, en caso de que hayamos instalado una versión diferente de Scala.
Antes de ponernos manos a la obra con Flink, tenemos que poner en marcha un clúster. La primera tarea es instalar Flink. Al igual que Kafka, Flink se puede descargar desde Sitio de descargas de Apache Flink.
La carpeta fuente de Flink tiene dos subcarpetas que vale la pena señalar: basura y conf. Ambos contienen la misma información que tenían sobre Kafka. Hay una carpeta más que vale la pena mencionar: registro. Cuando se lanza el Flink Cluster, esta carpeta se rellena. Los registros se escriben allí cuando se lanza o termina el clúster, así como cuando se ejecutan los trabajos.
Para lanzar el Flink Cluster, abre una nueva pestaña de terminal en la carpeta fuente de Flink y ejecuta:
El clúster debe estar en funcionamiento y listo para recibir trabajos para ejecutarse. Podemos comprobar que está funcionando accediendo a la interfaz de usuario web de Flink que se ejecuta en localhost:8081.
Es hora de crear una aplicación Flink sencilla que se ejecute como un trabajo. La idea es consumir los discos de Kafka con los que publicamos nuestro tema kafkiano. Por último, escribiremos el valor de dichos registros en una tabla de Cassandra.
Para empezar fácilmente con Scala, recomendamos instalar SBT. SBT es el gestor de paquetes preferido de la comunidad de Scala. SBT se puede instalar fácilmente a través de Homebrew en Mac, Chocolatey en Windows o rpm en Linux. Descubra más detalles aquí.
SBT ofrece algunos proyectos de plantillas para empezar a usar Scala. Para crear la forma más sencilla, abre una pestaña de terminal en el directorio en el que quieres crear el proyecto. Luego ejecuta:
Se te pedirá que pongas un nombre a tu proyecto. Después de eso, ¡estás listo para comenzar! Ve al directorio raíz de tu proyecto (el que tiene un archivo build.sbt) e intenta ejecutar:
Ahora el proyecto se está compilando y ejecutando. Pronto verás:
¿Quién dijo que empezar con Scala era difícil?
Antes de pasar a la sintaxis específica de sbt, hay un detalle que debemos tener en cuenta. Flink nos permite enviar archivos.JAR. La mayoría de las veces, necesitamos añadir dependencias que no sean nativas de Flink (por ejemplo, conectores). Esta información debe estar dentro del Jar. Un Jar que contiene todas sus dependencias se conoce como tarro de grasa o tarro de Uber. Con el fin de construir un tarro de grasa, necesitamos un complemento específico: el complemento sbt-assembly. SBT-Assembly funciona como el sombreado de dependencias de Maven.
Según el documentación del complemento sbt un enfoque válido para instalar complementos dentro de un proyecto es crear un archivo plugins.sbt. Este archivo debe estar ubicado en el directorio /project del directorio raíz del proyecto. El único complemento que necesitamos por ahora es el complemento de ensamblaje. Por lo tanto, nuestro plugins.sbt debería tener este aspecto:
agrega SBTPlugin («com.eed3si9n»% «sbt-assembly»% «1.2.0»);
Como se mencionó anteriormente, Flink requiere Scala 2.12.x para ejecutarse. Toda la configuración de Scala a nivel de proyecto se realizará en el archivo build.sbt.
Cada entrada de este archivo se denomina establecer expresión. Cada expresión de configuración consta de una clave, un operador y un valor. La expresión de configuración más común es la expresión de dependencia. Veamos cómo se ven:
Esta línea añade la biblioteca base de Flink a nuestro proyecto. Verifique que coincida con la definición que acabamos de crear: Dependencias de la biblioteca es una clave. += es un operador y «org.apache.flink»% «flink-core»% «1.15.0» es un valor. Estas tres últimas cadenas son los artefactos de Maven, GroupID, ArtifactID y version.
Con esta breve introducción, veamos el código que necesitamos en nuestro archivo build.sbt para empezar:
Este código es bastante sencillo. En primer lugar, especificamos la versión de Scala. Recuerde que necesitamos Scala 2.12.x para ejecutar Flink. El segundo fragmento son los metadatos del archivo jar. El tercer bloque son las dependencias que necesitamos. El cuarto fragmento resuelve los conflictos introducidos por el complemento de ensamblaje.
Puede encontrar más información sobre SBT en el documentación oficial.
El siguiente fragmento de código es el código más básico (prácticamente sin procesamiento de datos real) para transferir eventos de un tema de Kafka a una tabla de Cassandra. En este contexto, hundir datos es otra palabra (bastante sofisticada) para referirse a enviar datos de un sistema a otro.
Este código debe estar en el directorio /src/main/scala. Hemos llamado al archivo Main.scala, pero puedes elegir cualquier nombre diferente siempre que el archivo y el nombre del objeto Scala sean los mismos. Asegúrese de que su objeto de Scala amplíe la característica App.
Están pasando muchas cosas aquí. Vamos a desglosarlo un poco.
Depurar las aplicaciones de Flink puede resultar complicado. El siguiente es un consejo personal para los usuarios de sistemas operativos tipo Unix. Para comprobar rápidamente los registros de trabajos más recientes de Flink, cambie el directorio al directorio fuente de Flink y ejecute:
Esto generará los registros más recientes de su TaskExecutor.
A pesar de que la aplicación Flink está completa, la aplicación en sí misma no es suficiente para probarla. Todavía necesitamos algún tipo de instancia de Cassandra en ejecución para almacenar valores. La siguiente entrada de esta serie de artículos abordará este tema.
Antes de continuar, ¿puede pensar en una implementación similar de esta canalización utilizando alguna otra tecnología para el procesamiento de flujos de datos? ¿Qué ventajas y desventajas ofrecería? Te dejaremos una idea para que comiences:
Código fuente: La aplicación Flink se encuentra dentro de código fuente repositorio.
¿Te perdiste alguno de nuestros artículos anteriores sobre este oleoducto? Échales un vistazo aquí:
En el artículo anterior nos centramos en empezar con Apache Kafka. Ahora nos centraremos en Apache Flink: la tecnología principal de la que disponemos. Configuraremos un clúster de Flink y aprenderemos a crear y enviar una aplicación. También veremos rápidamente algunas herramientas de Scala y Scala necesarias para crear esta aplicación de forma adecuada.
Recuerde que la canalización tiene el siguiente aspecto:
De manera similar a lo que ocurrió con Kafka, la arquitectura de Flink debe explicarse en detalle. Dado que el propósito de esta guía es mostrar una configuración fácil y rápida para empezar a usar Flink, solo mencionaremos el gestor de tareas y los gestores de tareas.
El administrador de trabajos es el proceso responsable de coordinar la ejecución de las solicitudes. En particular, las aplicaciones distribuidas. Programa los trabajos, media el acceso a los recursos, reacciona ante eventos críticos (como la falla de un nodo), etc.
Los administradores de tareas son responsables de las operaciones reales con los datos. Tienen ranuras, que son los anfitriones para el procesamiento real.
Hay mucho más en Flink. No esperamos más que una comprensión intuitiva de su arquitectura. Flink tiene una documentación excelente sobre su arquitectura, ¡y es una lectura recomendada! ¡Compruébalo aquí.
Vale la pena mencionar que Flink 1.15.0 se ejecuta en Scala 2.12. Podemos configurar la versión que usa nuestra aplicación con SBT, en caso de que hayamos instalado una versión diferente de Scala.
Antes de ponernos manos a la obra con Flink, tenemos que poner en marcha un clúster. La primera tarea es instalar Flink. Al igual que Kafka, Flink se puede descargar desde Sitio de descargas de Apache Flink.
La carpeta fuente de Flink tiene dos subcarpetas que vale la pena señalar: basura y conf. Ambos contienen la misma información que tenían sobre Kafka. Hay una carpeta más que vale la pena mencionar: registro. Cuando se lanza el Flink Cluster, esta carpeta se rellena. Los registros se escriben allí cuando se lanza o termina el clúster, así como cuando se ejecutan los trabajos.
Para lanzar el Flink Cluster, abre una nueva pestaña de terminal en la carpeta fuente de Flink y ejecuta:
El clúster debe estar en funcionamiento y listo para recibir trabajos para ejecutarse. Podemos comprobar que está funcionando accediendo a la interfaz de usuario web de Flink que se ejecuta en localhost:8081.
Es hora de crear una aplicación Flink sencilla que se ejecute como un trabajo. La idea es consumir los discos de Kafka con los que publicamos nuestro tema kafkiano. Por último, escribiremos el valor de dichos registros en una tabla de Cassandra.
Para empezar fácilmente con Scala, recomendamos instalar SBT. SBT es el gestor de paquetes preferido de la comunidad de Scala. SBT se puede instalar fácilmente a través de Homebrew en Mac, Chocolatey en Windows o rpm en Linux. Descubra más detalles aquí.
SBT ofrece algunos proyectos de plantillas para empezar a usar Scala. Para crear la forma más sencilla, abre una pestaña de terminal en el directorio en el que quieres crear el proyecto. Luego ejecuta:
Se te pedirá que pongas un nombre a tu proyecto. Después de eso, ¡estás listo para comenzar! Ve al directorio raíz de tu proyecto (el que tiene un archivo build.sbt) e intenta ejecutar:
Ahora el proyecto se está compilando y ejecutando. Pronto verás:
¿Quién dijo que empezar con Scala era difícil?
Antes de pasar a la sintaxis específica de sbt, hay un detalle que debemos tener en cuenta. Flink nos permite enviar archivos.JAR. La mayoría de las veces, necesitamos añadir dependencias que no sean nativas de Flink (por ejemplo, conectores). Esta información debe estar dentro del Jar. Un Jar que contiene todas sus dependencias se conoce como tarro de grasa o tarro de Uber. Con el fin de construir un tarro de grasa, necesitamos un complemento específico: el complemento sbt-assembly. SBT-Assembly funciona como el sombreado de dependencias de Maven.
Según el documentación del complemento sbt un enfoque válido para instalar complementos dentro de un proyecto es crear un archivo plugins.sbt. Este archivo debe estar ubicado en el directorio /project del directorio raíz del proyecto. El único complemento que necesitamos por ahora es el complemento de ensamblaje. Por lo tanto, nuestro plugins.sbt debería tener este aspecto:
agrega SBTPlugin («com.eed3si9n»% «sbt-assembly»% «1.2.0»);
Como se mencionó anteriormente, Flink requiere Scala 2.12.x para ejecutarse. Toda la configuración de Scala a nivel de proyecto se realizará en el archivo build.sbt.
Cada entrada de este archivo se denomina establecer expresión. Cada expresión de configuración consta de una clave, un operador y un valor. La expresión de configuración más común es la expresión de dependencia. Veamos cómo se ven:
Esta línea añade la biblioteca base de Flink a nuestro proyecto. Verifique que coincida con la definición que acabamos de crear: Dependencias de la biblioteca es una clave. += es un operador y «org.apache.flink»% «flink-core»% «1.15.0» es un valor. Estas tres últimas cadenas son los artefactos de Maven, GroupID, ArtifactID y version.
Con esta breve introducción, veamos el código que necesitamos en nuestro archivo build.sbt para empezar:
Este código es bastante sencillo. En primer lugar, especificamos la versión de Scala. Recuerde que necesitamos Scala 2.12.x para ejecutar Flink. El segundo fragmento son los metadatos del archivo jar. El tercer bloque son las dependencias que necesitamos. El cuarto fragmento resuelve los conflictos introducidos por el complemento de ensamblaje.
Puede encontrar más información sobre SBT en el documentación oficial.
El siguiente fragmento de código es el código más básico (prácticamente sin procesamiento de datos real) para transferir eventos de un tema de Kafka a una tabla de Cassandra. En este contexto, hundir datos es otra palabra (bastante sofisticada) para referirse a enviar datos de un sistema a otro.
Este código debe estar en el directorio /src/main/scala. Hemos llamado al archivo Main.scala, pero puedes elegir cualquier nombre diferente siempre que el archivo y el nombre del objeto Scala sean los mismos. Asegúrese de que su objeto de Scala amplíe la característica App.
Están pasando muchas cosas aquí. Vamos a desglosarlo un poco.
Depurar las aplicaciones de Flink puede resultar complicado. El siguiente es un consejo personal para los usuarios de sistemas operativos tipo Unix. Para comprobar rápidamente los registros de trabajos más recientes de Flink, cambie el directorio al directorio fuente de Flink y ejecute:
Esto generará los registros más recientes de su TaskExecutor.
A pesar de que la aplicación Flink está completa, la aplicación en sí misma no es suficiente para probarla. Todavía necesitamos algún tipo de instancia de Cassandra en ejecución para almacenar valores. La siguiente entrada de esta serie de artículos abordará este tema.
Antes de continuar, ¿puede pensar en una implementación similar de esta canalización utilizando alguna otra tecnología para el procesamiento de flujos de datos? ¿Qué ventajas y desventajas ofrecería? Te dejaremos una idea para que comiences:
Código fuente: La aplicación Flink se encuentra dentro de código fuente repositorio.
¿Te perdiste alguno de nuestros artículos anteriores sobre este oleoducto? Échales un vistazo aquí: