Capítulo 1. Conoce Kafka Connect

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Los sistemas para manejar datos han existido desde los primeros días de los ordenadores. Sin embargo, la cantidad de datos que se generan y recopilan está creciendo a un ritmo exponencial. Se calcula que en 2018 se crearon 2,5 quintillones de bytes de datos al día, y la Corporación Internacional de Datos (IDC) prevé que el tamaño total de todos los datos existentes se duplicará entre 2022 y 2025.

Para que las organizaciones puedan manejar estos grandes volúmenes de datos, ahora llamados "big data", se han diseñado nuevas clases de sistemas. Ahora hay cientos de bases de datos, almacenes de datos y herramientas de procesamiento diferentes para atender todos los casos imaginables de uso de big data. Hoy en día, una organización típica utiliza varios de estos sistemas. Esto puede deberse a que los diferentes sistemas se han heredado a través de adquisiciones, se han optimizado para casos de uso específicos, o han sido gestionados por diferentes equipos. O puede ser que las herramientas preferidas hayan cambiado con el tiempo y no se hayan actualizado las aplicaciones antiguas.

Para la mayoría de las organizaciones, limitarse a recopilar y almacenar datos en bruto no basta para obtener una ventaja competitiva o prestar servicios novedosos. Para extraer ideas, los datos deben refinarse analizándolos y combinándolos a partir de múltiples fuentes. Por ejemplo, los datos del equipo de marketing pueden utilizarse junto con los de ventas para identificar qué campañas funcionan mejor. Los datos de ventas y del perfil del cliente pueden combinarse para crear programas de recompensa personalizados. La combinación de herramientas que se utiliza para la recopilación y agregación de datos se denomina canalización de datos.

En los últimos diez años, Apache Kafka se ha convertido en el estándar de facto para la ingesta y el procesamiento de grandes cantidades de datos en tiempo real. Kafka es una plataforma de flujo de datos de código abierto y está diseñada para servir de columna vertebral de los datos de las organizaciones. Actualmente es un componente clave en muchas Implementaciones de datos, ya que lo utiliza más del 80% de las empresas Fortune 100. Muchas aplicaciones nuevas se desarrollan para trabajar con Kafka, de modo que sus datos estén inmediatamente disponibles en alto grado y puedan reutilizarse fácilmente y procesarse con eficacia para impulsar el conocimiento en tiempo real.

La mayoría de las organizaciones ya tienen muchos datos en los sistemas existentes. A primera vista puede parecer relativamente fácil escribir una aplicación para agregar datos de estos sistemas, porque la mayoría de ellos tienen API. Sin embargo, a medida que aumenta el número de sistemas externos que utilizas, hacerlo puede convertirse rápidamente en una carga grande y costosa en términos de mantenimiento y tiempo del desarrollador. Los sistemas tienen sus propios formatos y API únicos, y a menudo son gestionados por equipos o departamentos diferentes. Si luego añades a consideraciones en torno a la seguridad y la privacidad de los datos, como el Reglamento General de Protección de Datos (RGPD) de la Unión Europea, escribir una aplicación puede convertirse rápidamente en una ardua tarea.

Para resolver estos problemas, se han desarrollado varios sistemas de integración. Un sistema de integración está diseñado para conectarse a varios sistemas y acceder a los datos.

Kafka Connect es uno de estos sistemas de integración. Forma parte de Apache Kafka y está especializado en integrar otros sistemas con Kafka para que los datos puedan moverse, reutilizarse, combinarse o procesarse fácilmente. Por ejemplo, Kafka Connect puede utilizarse para transmitir cambios de una base de datos a Kafka, permitiendo que otros servicios reaccionen fácilmente en tiempo real. Del mismo modo, una vez que los datos se han procesado completamente en Kafka, Kafka Connect puede trasladarlos a un almacén de datos, donde pueden conservarse durante largos periodos.

Características de Kafka Connect

Kafka Connect proporciona un tiempo de ejecución y un marco para construir y ejecutar sólidos conductos de datos que incluyen Kafka. Se introdujo por primera vez en Kafka 0.10.0.0 en 2016 a través de KIP-26. Kafka Connect está probado en combate y se sabe que es resistente bajo carga y a gran escala. El tiempo de ejecución de Kafka Connect también proporciona un único plano de control para gestionar todas tus canalizaciones, y a menudo permite construir canalizaciones sin escribir ningún código para que los ingenieros puedan centrarse en sus casos de uso en lugar de mover los datos.

Kafka Connect distingue entre tuberías deorigen, en las que los datos llegan de un sistema externo a Kafka, y tuberías de destino, en las que los datos fluyen de Kafka a un sistema externo. Con Kafka Connect, un lado de la tubería tiene que ser Kafka, por lo que no puedes conectar directamente dos sistemas externos. Dicho esto, es muy habitual que los datos importados a Kafka a través de una canalización de origen acaben en otro sistema externo a través de una canalización de destino una vez procesados.

Por ejemplo, la Figura 1-1 muestra una canalización de origen que importa datos de una base de datos a Kafka.

A basic source pipeline with Kafka Connect.
Figura 1-1. Una canalización de origen básica con Kafka Connect.

Echemos un vistazo más de cerca al conjunto único de funciones y características que hacen de Kafka Connect una plataforma muy popular para construir canalizaciones de datos e integrar sistemas:

  • Arquitectura enchufable

  • Escalable y fiable

  • Definición declarativa de canalizaciones

  • Parte de Apache Kafka

Arquitectura enchufable

Kafka Connect proporciona lógica común y API claras para obtener datos dentro y fuera de Kafka de forma resistente. Utiliza plug-ins para encapsular la lógica específica a sistemas externos. La comunidad Kafka ha creado cientos de plug-ins para interactuar con bases de datos, sistemas de almacenamiento y diversos protocolos comunes. Esto hace que sea rápido y fácil empezar incluso con canalizaciones de datos complejas. Si tienes sistemas personalizados o ninguno de los plug-ins existentes satisface tus necesidades, Kafka Connect proporciona API para que puedas implementar los tuyos propios.

Kafka Connect te permite construir canalizaciones de datos complejas combinando plug-ins. Los plug-ins utilizados para definir canalizaciones se denominan plug-ins conectores. Hay varios tipos de plug-ins conectores:

  • Conectores de origen, que importan datos de un sistema externo a Kafka

  • Conectores Sink, que exportan datos de Kafka a un sistema externo

  • Convertidores, que convierten datos entre Kafka Connect y sistemas externos

  • Transformaciones, que transforman los datos a medida que fluyen por Kafka Connect

  • Predicados, que condicionalmente aplican transformaciones

Una canalización se compone de un único conector y un convertidor, e incluye transformaciones y predicados opcionales. Kafka Connect admite tanto canalizaciones Extract-Load-Transform (ELT) como Extract-Transform-Load (ETL). En las canalizaciones ELT, Kafka Connect realiza los pasos de extracción y carga, lo que te permite utilizar otro sistema para realizar transformaciones una vez que los datos llegan al sistema de destino. En las canalizaciones ETL, las transformaciones de Kafka Connect actualizan los datos a medida que fluyen a través de Kafka Connect.

La Figura 1-2 muestra un canal ETL sencillo compuesto por un conector fuente, una transformación (un filtro de registros) y un convertidor.

Components in a Kafka Connect pipeline
Figura 1-2. Complementos de Kafka Connect formando una canalización de origen

Junto a los plug-ins de conector, hay otro grupo de plug-ins que se utilizan para personalizar el propio Kafka Connect. Se trata de , denominados complementos de trabajador:

  • Las extensiones REST personalizan la API REST.

  • Los proveedores de configuración recuperan dinámicamente las configuraciones en tiempo de ejecución.

  • Las políticas de anulación de clientes de conectores controlan qué configuraciones pueden establecer los usuarios para los clientes Kafka utilizados por los conectores .

Escalabilidad y fiabilidad

Kafka Connect se ejecuta independientemente de los brokers de Kafka y puede implementarse en un único host como aplicación independiente o en varios hosts para formar un clúster distribuido. Un host que ejecuta Kafka Connect se denomina trabajador.

Estas dos opciones de implementación permiten a Kafka Connect gestionar un amplio espectro de cargas de trabajo. Puedes tener cargas de trabajo que escalen desde una única canalización que fluya sólo unos pocos eventos hasta docenas de trabajadores que manejen millones de eventos por segundo. También puedes añadir y eliminar trabajadores de un clúster de Kafka Connect en tiempo de ejecución, lo que te permite ajustar la capacidad para que coincida con el rendimiento requerido.

Cuando se implementa como clúster, los trabajadores cooperan y cada uno se encarga de una parte de la carga de trabajo. Esto hace que Kafka Connect sea muy fiable y resistente a los fallos, porque si un trabajador falla, los demás pueden hacerse cargo de su carga de trabajo.

La Figura 1-3 muestra un clúster de Kafka Connect que maneja dos canalizaciones de datos (de la Base de Datos 1 a Kafka, y de la Base de Datos 2 a Kafka), y la carga de trabajo se distribuye entre los trabajadores disponibles.

A Kafka Connect cluster composed of three workers handling two pipelines
Figura 1-3. Un clúster Kafka Connect compuesto por tres trabajadores que gestionan dos canalizaciones

Definición declarativa de tuberías

Kafka Connect te permite definir de forma declarativa tus canalizaciones. Esto significa que, combinando plug-ins del conector, puedes construir potentes canalizaciones de datos sin escribir código. Las canalizaciones se definen mediante JSON (o archivos de propiedades, en la configuración autónoma) que describe los plug-ins a utilizar y sus configuraciones. Esto permite a los ingenieros de datos centrarse en sus casos de uso y abstraerse de las complejidades de los sistemas con los que interactúan.

Para definir y operar canalizaciones, Kafka Connect expone una API REST. Esto significa que puedes iniciar, detener, configurar y controlar fácilmente la salud y el estado de todas tus canalizaciones de datos.

Una vez creada una canalización a través de la API REST, Kafka Connect instala automáticamente los complementos necesarios en los trabajadores disponibles en el clúster Connect.

Parte de Apache Kafka

Kafka Connect forma parte del proyecto Apache Kafka y está hecho a medida para trabajar con Kafka. Apache Kafka es un proyecto de código abierto, lo que significa que Kafka Connect se beneficia de una comunidad grande y activa. Como se ha mencionado, hay cientos de complementos disponibles para Kafka Connect que han sido creados por la comunidad. Kafka Connect recibe mejoras y nuevas funciones con cada versión de Kafka. Estos cambios van desde actualizaciones de usabilidad hasta modificaciones que permiten a Kafka Connect aprovechar las últimas funciones de Kafka.

Para los desarrolladores y administradores que ya utilizan y conocen Kafka, Kafka Connect ofrece una opción de integración que no requiere un nuevo sistema y reutiliza muchos de los conceptos y prácticas de Kafka. Internamente, Kafka Connect utiliza clientes Kafka normales, por lo que tiene muchos ajustes de configuración y procedimientos de funcionamiento similares.

Aunque se recomienda ejecutar siempre la última versión de Kafka y Kafka Connect, no estás obligado a hacerlo. La comunidad de Kafka trabaja duro para garantizar que los clientes más antiguos reciban soporte durante el mayor tiempo posible. Esto significa que siempre podrás actualizar tus clusters de Kafka y Kafka Connect de forma independiente. Del mismo modo, las API de Kafka Connect se desarrollan teniendo en cuenta la compatibilidad con versiones anteriores. Esto significa que puedes utilizar complementos desarrollados para una versión de la API de Kafka Connect más antigua o más reciente que la que estás ejecutando.

Cuando Kafka Connect se ejecuta en modo distribuido, necesita algún lugar donde almacenar su configuración y estado. En lugar de necesitar un sistema de almacenamiento independiente, Kafka Connect almacena todo lo que necesita en Kafka.

Ahora que ya sabes qué es Kafka Connect, vamos a repasar algunos de los casos de uso en los que destaca.

Casos prácticos

Kafka Connect puede utilizarse para una amplia gama de casos de uso que implican introducir o extraer datos de Kafka. En esta sección exploramos los casos de uso más comunes de Kafka Connect y explicamos las ventajas que ofrecen para gestionar y procesar datos.

Los casos de uso son:

  • Capturar cambios en la base de datos

  • Duplicación de clusters Kafka

  • Construir lagos de datos

  • Agregar troncos

  • Modernizar los sistemas heredados

Capturar cambios en la base de datos

Un requisito común de las canalizaciones de datos es que las aplicaciones puedan seguir los cambios en una base de datos en tiempo real. Este caso de uso se denomina captura de datos de cambios (CDC).

Hay una serie de conectores para Kafka Connect que pueden transmitir los cambios de las bases de datos en tiempo real. Esto significa que en lugar de tener muchas aplicaciones consultando la base de datos, sólo tienes una: Kafka Connect. Esto reduce la carga de la base de datos y facilita mucho la evolución del esquema de tus tablas a lo largo del tiempo. Kafka Connect también puede transformar los datos imponiendo un esquema, validando datos o eliminando datos sensibles antes de enviarlos a Kafka. Esto te proporciona un mejor control sobre las vistas de los datos por parte de otras aplicaciones.

Hay un subconjunto de plug-ins conectores que eliminan por completo la necesidad de consultar la base de datos. En lugar de consultar la base de datos, acceden al archivo de registro de cambios que mantiene un registro de las actualizaciones, lo que constituye una forma más fiable y que consume menos recursos de realizar el seguimiento de los cambios.

El proyecto Debezium proporciona complementos de conectores para muchas bases de datos populares que utilizan el archivo de registro de cambios para generar eventos. En el Capítulo 5, demostramos dos formas distintas de capturar cambios de una base de datos MySQL: utilizando un conector Debezium, y utilizando un conector JDBC que realiza CDC basado en consultas.

Duplicación de clusters Kafka

Otro uso popular caso de Kafka Connect es copiar datos de un clúster Kafka a otro. Esto se denomina duplicación y es un requisito clave en muchos escenarios, como la creación de entornos de recuperación ante desastres, la migración de clusters o la georreplicación.

Aunque Kafka tiene capacidad de recuperación incorporada, en implementaciones críticas para la producción puede ser necesario tener un plan de recuperación en caso de que tu infraestructura se vea afectada por una interrupción importante. El mirroring te permite sincronizar varios clusters para minimizar el impacto de los fallos.

También es posible que quieras que tus datos estén disponibles en distintos clusters por otras razones. Por ejemplo, puede que quieras ponerlos a disposición de aplicaciones que se ejecuten en un centro de datos o región distintos, o tener una copia con la información sensible eliminada.

El proyecto Kafka proporciona MirrorMaker para reflejar datos y metadatos entre clusters. MirrorMaker es un conjunto de conectores que pueden utilizarse en diversas combinaciones para satisfacer tus requisitos de duplicación. En el Capítulo 6 veremos cómo implementarlos y gestionarlos correctamente.

Construir lagos de datos

Puedes utilizar Kafka Connect para copiar datos en un lago de datos creado a tal efecto o archivarlos en un almacenamiento rentable como Amazon Simple Storage Service (Amazon S3). Esto es especialmente interesante si necesitas conservar grandes cantidades de datos o mantenerlos durante mucho tiempo (por ejemplo, con fines de auditoría). Si los datos vuelven a necesitarse en el futuro, siempre puedes volver a importarlos con Kafka Connect.

Nota

La comunidad de Kafka está añadiendo actualmente a Kafka soporte para el almacenamiento por niveles. Esto significa que, en una versión futura, podrás configurar Kafka para que almacene algunos de sus datos en un sistema de almacenamiento a más largo plazo sin que ello afecte a las aplicaciones conectadas. Sin embargo, crear una copia completa de los datos seguirá requiriendo una herramienta como Kafka Connect.

Copiar tus datos de eventos de Kafka a un sistema de almacenamiento dedicado también puede ser útil para aprendizaje automático (ML) e inteligencia artificial (IA), que suelen utilizar datos de entrenamiento. Cuanto más realistas sean los datos de entrenamiento, mejor será tu sistema. En lugar de crear datos simulados, puedes utilizar Kafka Connect para copiar tus eventos reales a una ubicación a la que pueda acceder tu sistema de ML o IA.

En el Capítulo 5, demostramos cómo utilizar un conector para exportar datos de temas Kafka a un bucket en Amazon S3.

Agregar registros

A menudo resulta útil almacenar y datos agregados como registros, métricas y eventos de todas tus aplicaciones. Es mucho más fácil analizar los datos una vez que están en una única ubicación. Además, con el auge de la nube, los contenedores y Kubernetes, debes esperar que la infraestructura elimine completamente tus cargas de trabajo y las vuelva a crear desde cero si observa un error. Esto significa que es esencial almacenar datos como los registros en un lugar central, en lugar de con la aplicación, para evitar perderlos. Kafka es ideal para la agregación de datos, ya que es capaz de manejar grandes volúmenes de datos con una latencia muy baja.

Kafka puede configurarse como un appender de mediante bibliotecas de registro como Apache Log4j2 para enviar registros directamente desde las aplicaciones a Kafka en lugar de escribirlos en archivos de registro en el almacenamiento. Sin embargo, esto sólo funciona para aplicaciones que puedan utilizar este tipo de bibliotecas. Sin Kafka Connect, probablemente tendrías que añadir clientes de Kafka a muchas aplicaciones y sistemas, así como capacitar a todos tus equipos para que comprendan cómo escribir, implementar y ejecutar esos clientes. Una vez superado este obstáculo inicial, dispondrás de múltiples lugares diferentes que actualizar si cambias de opinión sobre la forma de los datos que se recogen o adónde deben enviarse.

Añadir Kafka Connect a este tipo de casos de uso reduce la sobrecarga para recopilar los datos. Puedes hacer que un solo equipo implemente y gestione el clúster de Kafka Connect, y -dado el gran número de conectores que ya existen- a menudo pueden hacerlo sin escribir ningún código. Como los conectores y su configuración se gestionan a través de Kafka Connect, puedes cambiar los formatos de los datos y los temas de destino en un solo lugar.

Modernizar los sistemas heredados

Las arquitecturas modernas han tendido a desplegando muchas aplicaciones pequeñas en lugar de un monolito singular. Esto puede causar problemas a los sistemas existentes, que no fueron diseñados para soportar la carga de trabajo que supone comunicarse con tantas aplicaciones. También suelen ser incapaces de soportar el procesamiento en tiempo real. Como Kafka es un sistema de mensajería de publicación/suscripción, crea una separación entre las aplicaciones que le envían datos y las que los leen. Esto lo convierte en una herramienta muy útil como intermediario entre distintos sistemas. Puedes utilizar Kafka Connect para que los datos heredados estén disponibles en Kafka, y luego hacer que tus nuevas aplicaciones se conecten a Kafka en su lugar. Las aplicaciones Kafka no necesitan estar conectadas todo el tiempo ni leer los datos en tiempo real. Esto permite a las aplicaciones heredadas procesar los datos por lotes, evitando la necesidad de reescribirlas.

Alternativas a Kafka Connect

Puesto que hay muchos sistemas de datos diferentes, no es de extrañar que también haya muchos sistemas de integración diferentes. Kafka Connect no es la única herramienta diseñada para construir canalizaciones de datos, y muchas otras herramientas también son compatibles con Kafka. No entraremos en detalles sobre todas las alternativas a Kafka Connect, pero enumeraremos algunas populares. Cada herramienta tiene sus propias especificidades y debes elegir una en función de tus requisitos, experiencia actual y herramientas. Muchas de las alternativas disponibles proporcionan integración con Kafka. El proyecto Kafka admite varias versiones de cliente, por lo que la herramienta que elijas no tiene por qué utilizar el cliente Kafka más reciente. Sin embargo, si utilizas estas herramientas, es posible que no puedas aprovechar las nuevas funciones de Kafka tan rápidamente como si utilizaras Kafka Connect.

Aquí tienes algunas alternativas de código abierto que puedes considerar:

Apache Camel
Un marco de integración. Se puede implementar de forma independiente o incrustado como parte de un servidor de aplicaciones. Apache Camel incluye un componente Kafka que puede introducir y extraer datos de Kafka.
Apache NiFi
Un sistema para procesar y distribuir datos que se puede implementar en un clúster. Apache NiFi proporciona procesadores para enviar datos a y desde Kafka.
Canal Apache
Un sistema para recoger, agregar y trasladar grandes cantidades de datos de registro de las aplicaciones a una ubicación central.
LinkedIn Hoptimator
Un plano de control basado en SQL para canalizaciones de datos complejas. Hoptimator incluye un adaptador para Kafka.
Nota

Varios proveedores ofrecen soporte o distribuciones personalizadas para los sistemas de código abierto enumerados anteriormente. Muchas empresas también han desarrollado sistemas y plataformas de integración propios para dirigirse a casos de uso o sectores específicos.

Resumen

Este primer capítulo ha presentado el panorama actual de los datos y los problemas a los que se enfrentan muchas organizaciones a la hora de manejarlos. Los datos suelen estar dispersos en muchos sistemas diferentes, lo que puede dificultar que las organizaciones los utilicen para obtener información y ofrecer servicios innovadores a sus clientes. Los sistemas de integración como Kafka Connect están diseñados para resolver estos problemas proporcionando mecanismos sencillos, escalables y fiables para construir canalizaciones de datos entre varios sistemas.

Kafka Connect tiene algunas características clave que lo hacen popular. Tiene una arquitectura enchufable que facilita la construcción de canalizaciones complejas sin código. Es escalable y fiable, con una útil API de gestión REST que puede utilizarse para automatizar operaciones. Por último, forma parte del proyecto de código abierto Apache Kafka y se beneficia de la próspera comunidad Kafka.

Get Conexión Kafka now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.