Saltar al contenido principal

Apache Kafka para principiantes: Guía completa

Explora Apache Kafka con nuestra guía para principiantes. Aprende lo básico, ponte en marcha y descubre las funciones avanzadas y las aplicaciones reales de esta potente plataforma de retransmisión de eventos.
Actualizado 11 sept 2024  · 8 min de lectura

El panorama de las aplicaciones modernas se ha transformado completamente con los microservicios y las arquitecturas de aplicaciones basadas en eventos. Los días del procesamiento por lotes han pasado a la historia. Para satisfacer las exigencias de velocidad y disponibilidad, los desarrolladores buscan una puntualidad casi real y una arquitectura de aplicaciones totalmente desacoplada.

Las aplicaciones desacopladas suelen utilizar un sistema de gestión de eventos para facilitar la integración entre distintos servicios. Otra aplicación de un almacén de eventos es en las arquitecturas basadas en fuentes de eventos, donde toda la lógica de la aplicación se expresa en términos de eventos. Aquí es donde Apache Kafka entra en la discusión.

Apache Kafka es un marco distribuido de flujo de eventos de código abierto desarrollado en LinkedIn por un equipo que incluía a Jay Kreps, Jun Rao y Neha Narkhede. La herramienta fue optimizada para ingerir y procesar datos en streaming en tiempo real; por tanto, puede utilizarse para implementar canalizaciones de datos de alto rendimiento, aplicaciones de análisis en streaming y servicios de integración de datos.

Esencialmente, Kafka es un marco para almacenes de eventos distribuidos y procesamiento de flujos que puede utilizarse como corredor de mensajes, almacén de eventos, sistema de gestión de colas, etc. Puedes leer nuestra comparación de Kafka frente a Amazon SQS en una guía aparte y comprobar cómo funcionan las Particiones de Kafka en nuestro tutorial. 

¿Por qué Kafka?

Tras almacenar los eventos, la plataforma de streaming de eventos los dirige a los servicios pertinentes. Los desarrolladores pueden escalar y mantener un sistema como éste sin depender de otros servicios. Dado que Kafka es un paquete todo en uno que puede utilizarse como intermediario de mensajes, almacén de eventos o marco de procesamiento de flujos, funciona de forma excelente para este tipo de requisitos.

Con un alto rendimiento y durabilidad, cientos de fuentes de datos pueden proporcionar simultáneamente enormes flujos de datos continuos que pueden ser procesados secuencial y progresivamente por el sistema de corredor de mensajes de Apache Kafka.

Además, las ventajas de Apache Kafka incluyen:

Alto rendimiento

La arquitectura bien diseñada de Kafka, que incluye partición de datos, procesamiento por lotes, técnicas de copia cero y registros de sólo apéndice, le permite alcanzar un alto rendimiento y manejar millones de mensajes por segundo, atendiendo a escenarios de datos de alta velocidad y volumen. Así, el protocolo de comunicación ligero que facilita la interacción eficaz cliente-agente hace factible el flujo de datos en tiempo real.

Escalabilidad

Apache Kafka proporciona equilibrio de carga entre servidores particionando un tema en varias particiones. Esto permite a los usuarios distribuir los clusters de producción entre áreas geográficas o zonas de disponibilidad y ampliarlos o reducirlos según sus necesidades. En otras palabras, Apache Kafka puede ampliarse fácilmente para gestionar billones de mensajes al día en un gran número de particiones.

Baja latencia

Apache Kafka utiliza un clúster de servidores con baja latencia (tan baja como 2 milisegundos) para entregar mensajes de forma eficiente a un rendimiento limitado de la red, desacoplando flujos de datos.

Durabilidad y fiabilidad

Apache Kafka mejora la tolerancia a fallos y la durabilidad de los datos de dos formas fundamentales:

  • Distribuye el almacenamiento de flujos de datos en un clúster tolerante a fallos para protegerse de los fallos del servidor
  • Guarda los mensajes en disco y ofrece replicación intra-clúster.

Alta disponibilidad

Gracias a sus intermediarios basados en clústeres, Kafka permanece operativo durante una interrupción del servidor. Esto funciona porque cuando uno de los servidores experimenta problemas, Kafka es lo suficientemente inteligente como para enviar consultas a distintos intermediarios.

Conviértete en Ingeniero de Datos

Conviértete en un ingeniero de datos mediante el aprendizaje avanzado de Python
Empieza a Aprender Gratis

Componentes básicos de Kafka

Apache Kafka permite a los usuarios analizar datos en tiempo real, almacenar registros en el orden en que fueron creados, y publicar y suscribirse a ellos.

Los componentes principales de Apache Kafka

Los componentes principales de Apache Kafka | Fuente: Inicia tu pipeline en tiempo real con Apache Kafka por Alex Kam

Apache Kafka es un clúster de servidores básicos escalable horizontalmente que procesa datos en tiempo real de múltiples sistemas y aplicaciones "productores" (por ejemplo, aplicaciones de registro, monitorización, sensores e Internet de las Cosas) y los pone a disposición de múltiples sistemas y aplicaciones "consumidores" (por ejemplo, análisis en tiempo real) con una latencia muy baja, como se muestra en el diagrama anterior.

Ten en cuenta que tanto las aplicaciones que dependen del procesamiento de datos en tiempo real como los sistemas de análisis pueden considerarse consumidores. Por ejemplo, una aplicación de micromarketing o logística basada en la localización.

He aquí algunos términos clave que debes conocer para comprender mejor los componentes básicos de Kafka:

  • Los intermediarios son servidores del clúster que almacenan datos y sirven a los clientes.
  • Los temas son categorías o feeds en los que se publican los registros. Ten en cuenta que hay dos tipos de temas: compactados y regulares. Los registros almacenados en temas compactados no están limitados por el tiempo o el espacio. Los mensajes de temas más antiguos con la misma clave se actualizan con mensajes más nuevos, y Apache Kafka no elimina el mensaje más reciente a menos que lo haga el usuario. En cambio, los registros almacenados en temas habituales pueden configurarse para que caduquen, lo que permite eliminar los datos obsoletos, liberando espacio de almacenamiento.
  • Los productores son aplicaciones cliente que publican (escriben) eventos en temas Kafka.
  • Los consumidores son aplicaciones que leen y procesan eventos de temas Kafka. Se pueden escribir programas Java que recuperen datos de Topics y devuelvan resultados a Apache Kafka gracias a la API de Streams para Apache Kafka. Los sistemas externos de procesamiento de flujos, como Apache Spark, Apache Apex, Apache Flink, Apache NiFi y Apache Storm, también pueden procesar estos flujos de mensajes.
  • Kafka utiliza una biblioteca cliente llamada "Streams" para crear microservicios y aplicaciones donde los datos se almacenan en clusters para entrada y salida.

Primeros pasos con Kafka

A menudo se recomienda iniciar Apache Kafka con Zookeeper para una compatibilidad óptima. Además, Kafka puede encontrarse con varios problemas cuando se instala en Windows porque no está diseñado de forma nativa para su uso con este sistema operativo. En consecuencia, se aconseja utilizar lo siguiente para lanzar Apache Kafka en Windows:

  • WSL2 si utilizas Windows 10 o posterior, o Docker
  • Docker Si utilizas Windows 8 o anterior

No se aconseja utilizar la JVM para ejecutar Kafka en Windows, ya que no tiene algunas de las características POSIX propias de Linux. Al final encontrarás dificultades si intentas ejecutar Kafka en Windows sin WSL2.

Dicho esto, el primer paso para instalar Apache Kafka en Windows es instalar WSL2.

Paso 1: Instalar WSL2

WSL2, o Subsistema Windows para Linux 2, da acceso a tu PC Windows a un entorno Linux sin necesidad de una máquina virtual.

La mayoría de los comandos de Linux son compatibles con WSL2, lo que acerca el proceso de instalación de Kafka a las instrucciones ofrecidas para Mac y Linux.

Consejo: Asegúrate de que estás ejecutando Windows 10 versión 2004 o superior (Build 19041 y superior) antes de instalar WSL2. Pulsa la tecla del logotipo de Windows + R, escribe "winver" y haz clic en Aceptar para ver tu versión de Windows.

La forma más sencilla de instalar el Subsistema de Windows para Linux (WSL) es ejecutando el siguiente comando en un PowerShell de administrador o en el Símbolo del sistema de Windows y, a continuación, reiniciando el ordenador:

wsl --install

Ten en cuenta que se te pedirá que crees una cuenta de usuario y una contraseña para la distribución de Linux que acabas de instalar.

Sigue los pasos del sitio web de Microsoft Docs si te quedas atascado.

Paso 2: Instalar Java

Si Java no está instalado en tu máquina, tendrás que descargar la última versión.

Paso 3: Instalar Apache Kafka

En el momento de escribir este artículo, la última versión estable de Apache Kafka es la 3.7.0, publicada el 27 de febrero de 2024. Esto puede cambiar en cualquier momento. Para asegurarte de que utilizas la versión más actualizada y estable de Kafka, consulta la página de descargas.

Descarga la última versión desde Descargas binarias.

Una vez finalizada la descarga, navega hasta la carpeta donde se descargó Kafka y extrae todos los archivos de la carpeta comprimida. Observa que hemos llamado a nuestra nueva carpeta "Kafka".

Paso 3: Iniciar Zookeeper

Zookeeper es necesario para la gestión de clusters en Apache Kafka. Por lo tanto, Zookeeper debe lanzarse antes que Kafka. No es necesario instalar Zookeeper por separado porque forma parte de Apache Kafka.

Abre el símbolo del sistema y navega hasta el directorio raíz de Kafka. Una vez allí, ejecuta el siguiente comando para iniciar Zookeeper:

.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

Comienza 4: Iniciar el servidor Kafka

Abre otro símbolo del sistema y ejecuta el siguiente comando desde la raíz de Apache Kafka para iniciar Apache Kafka:

.\bin\windows\kafka-server-start.bat .\config\server.properties

Paso 5: Crear un tema

Para crear un tema, inicia un nuevo símbolo del sistema desde el directorio raíz de Kafka y ejecuta el siguiente comando:

.\bin\windows\kafka-topics.bat --create --topic MyFirstTopic --bootstrap-server localhost:9092

Esto creará un nuevo tema Kafka llamado "MiPrimerTema".

Nota: para confirmar que se ha creado correctamente, al ejecutar el comando aparecerá "Crear tema <nombre del tema>".

Paso 6: Iniciar Productor Kafka

Debe iniciarse un productor para poner un mensaje en el tema Kafka. Ejecuta el siguiente comando para hacerlo:

.\bin\windows\kafka-console-producer.bat --topic MyFirstTopic --bootstrap-server localhost:9092

Paso 7: Iniciar consumidor Kafka

Abre otro símbolo del sistema desde el directorio raíz de Kafka y ejecuta el siguiente comando para enviar a stat el consumidor de Kafka:

.\bin\windows\kafka-console-consumer.bat --topic MyFirstTopic --from-beginning --bootstrap-server localhost:9092

Ahora, cuando se produce un mensaje en el Productor, el Consumidor lo lee en tiempo real.

Un mensaje producido por el Productor y leído por el Consumidor Kafka en tiempo real

Un GIF muestra un mensaje producido por el Productor y leído por el Consumidor Kafka en tiempo real.

Ahí lo tienes... Acabas de crear tu primer tema Kafka.

Funciones avanzadas de Kafka

Aquí tienes algunas funciones avanzadas de Kafka...

Kafka Streams

Con Apache Kafka, los desarrolladores pueden crear sólidas aplicaciones de procesamiento de flujos con la ayuda de Kafka Streams. Ofrece API y un Lenguaje Específico de Dominio (DSL) de alto nivel para manejar, convertir y evaluar flujos continuos de datos.

Algunas características clave son:

Tratamiento de flujos

El procesamiento en tiempo real de flujos de registros es posible gracias a Kafka Streams. Te permite recibir datos de temas Kafka, procesarlos y transformarlos, y luego devolver la información procesada a los temas Kafka. El procesamiento de flujos permite el análisis, la supervisión y el enriquecimiento de datos casi en tiempo real. Puede aplicarse a grabaciones individuales o a agregaciones con ventanas.

Procesamiento en tiempo real

Utilizando las marcas de tiempo adjuntas a los registros, puedes manejar registros fuera de orden con el soporte de Kafka Streams para el procesamiento de eventos en tiempo real. Proporciona operaciones de ventana con semántica de tiempo de evento, permitiendo la unión de ventanas, la sesionización y las agregaciones basadas en el tiempo.

Operaciones basadas en el tiempo y ventanas

Kafka Streams proporciona una serie de operaciones de ventana que permiten a los usuarios realizar cálculos sobre ventanas de sesión, ventanas giratorias, ventanas deslizantes y ventanas de tiempo fijo.

Los disparadores basados en eventos, los análisis sensibles al tiempo y las agregaciones basadas en el tiempo son posibles mediante procedimientos de ventana.

Procesamiento por estados

Durante el procesamiento de flujos, Kafka Streams permite a los usuarios mantener y actualizar el estado. Se proporciona soporte integrado para almacenes estatales. Ten en cuenta que un almacén de estados es un almacén clave-valor que puede actualizarse y consultarse dentro de una topología de procesamiento.

Las funciones avanzadas de procesamiento de flujos, como las uniones, las agregaciones y la detección de anomalías, son posibles gracias a las operaciones con estado.

Procesamiento exactamente una vez

Kafka Streams proporciona una semántica de extremo a extremo para el procesamiento exactamente una vez, garantizando que cada registro se gestiona precisamente una vez, incluso en caso de fallo. Esto se consigue utilizando las sólidas garantías de durabilidad y las funciones transaccionales de Kafka.

Kafka Connect

El marco de integración de datos declarativo y conectable para Kafka se llama Kafka Connect. Es un componente gratuito y de código abierto de Apache Kafka que actúa como un concentrador de datos centralizado para la integración sencilla de datos entre sistemas de archivos, bases de datos, índices de búsqueda y almacenes de valores clave.

La distribución de Kafka incluye Kafka Connect por defecto. Para instalarlo, sólo tienes que iniciar un proceso obrero.

Utiliza el siguiente comando desde el directorio raíz de Kafka para lanzar el proceso de trabajador de Kafka Connect:

.\bin\windows\connect-distributed.bat 
.\config\connect-distributed.properties

Esto lanzará el trabajador de Kafka Connect en modo distribuido, permitiendo la alta disponibilidad y escalabilidad de ejecutar numerosos trabajadores en un clúster.

Nota: El archivo .\config\connect-distributed.properties especifica la información del broker de Kafka y otras propiedades de configuración para Kafka Connect.

Los conectores son utilizados por Kafka Connect para transferir datos entre sistemas externos y temas Kafka. Los conectores pueden instalarse y configurarse para adaptarse a tus requisitos exclusivos de integración de datos.

Descargar y añadir el archivo JAR del conector al directorio plugin.path mencionado en el archivo .\config\connect-distributed.properties es todo lo que se necesita para instalar un conector.

Hay que crear un archivo de configuración para el conector, en el que se especifique la clase del conector y cualquier otra característica. La API REST de Kafka Connect y las herramientas de línea de comandos pueden utilizarse para construir y mantener conectores.

A continuación, para combinar datos de otros sistemas, debes configurar el Conector Kafka. Kafka Connect ofrece varios conectores para integrar datos de diversos sistemas, como sistemas de archivos, colas de mensajes y bases de datos. Selecciona un conector en función de las necesidades de integración que tengas: consulta la documentación para ver la lista de conectores.

Aplicaciones reales de Kafka

He aquí algunos casos de uso común de Apache Kafka.

Seguimiento de la actividad

Una plataforma de comercio electrónico en línea puede utilizar Kafka para seguir la actividad de los usuarios en tiempo real. Cada acción del usuario, como ver productos, añadir artículos al carrito, comprar, dejar opiniones, hacer búsquedas, etc., puede publicarse como un evento en temas Kafka concretos.

Otros microservicios pueden almacenar o utilizar estos eventos para la detección de fraudes en tiempo real, informes, ofertas personalizadas y recomendaciones.

Mensajería

Con su rendimiento mejorado, partición incorporada, replicación, tolerancia a fallos y capacidades de escalado, Kafka es un buen sustituto de los corredores de mensajes convencionales.

Una aplicación de transporte basado en microservicios puede utilizarlo para facilitar el intercambio de mensajes entre varios servicios.

Por ejemplo, la empresa de reservas de viajes puede utilizar Kafka para comunicarse con el servicio de búsqueda de conductores cuando un conductor hace una reserva. El servicio de búsqueda de conductores puede entonces, casi en tiempo real, localizar a un conductor en la zona y responder con un mensaje.

Agregación de registros

Normalmente, esto implica obtener archivos de registro físicos de los servidores y almacenarlos en una ubicación central para su procesamiento, como un servidor de archivos o un lago de datos. Kafka abstrae los datos como un flujo de mensajes y filtra la información específica del archivo. Esto permite procesar los datos con una latencia reducida y adaptarse más fácilmente al consumo de datos distribuidos y a diferentes fuentes de datos.

Una vez publicados los registros en Kafka, una herramienta de análisis de registros o un sistema de gestión de eventos e información de seguridad (SIEM) pueden utilizarlos para solucionar problemas, supervisar la seguridad y elaborar informes de cumplimiento.

Tratamiento de flujos

Varios usuarios de Kafka procesan datos en pipelines de procesamiento multietapa. Los datos de entrada sin procesar se toman de temas Kafka, se agregan, se enriquecen o se transforman de otro modo en nuevos temas para su consumo o procesamiento adicional.

Por ejemplo, un banco puede utilizar Kafka para procesar transacciones en tiempo real. Cada transacción que inicia un cliente se publica en un tema Kafka como un evento. Posteriormente, una aplicación puede recoger estos eventos, verificar y gestionar las transacciones, detener las dudosas y actualizar instantáneamente los saldos de los clientes.

Métricas

Un proveedor de servicios en la nube podría utilizar Kafka para agregar estadísticas de aplicaciones distribuidas y generar flujos centralizados de datos operativos en tiempo real. Las métricas de cientos de servidores, como el consumo de CPU y memoria, el recuento de peticiones, las tasas de error, etc., podrían notificarse a Kafka. Las aplicaciones de monitorización podrían entonces utilizar estas métricas para la identificación de anomalías, alertas y visualización en tiempo real.

Conclusión

Kafka es un marco para el procesamiento de flujos que permite a las aplicaciones publicar, consumir y procesar grandes cantidades de flujos de registros de forma rápida y fiable. Teniendo en cuenta la creciente prevalencia del flujo de datos en tiempo real, se ha convertido en una herramienta vital para los desarrolladores de aplicaciones de datos.

En este artículo, cubrimos por qué uno puede decidir utilizar Kafka, los componentes básicos, cómo empezar a utilizarlo, las funciones avanzadas y las aplicaciones del mundo real. Para seguir aprendiendo, consulta

Certifícate en el puesto de Ingeniero de Datos de tus sueños

Nuestros programas de certificación te ayudan a destacar y a demostrar que tus aptitudes están preparadas para el trabajo a posibles empleadores.

Consigue Tu Certificación
Timeline mobile.png

Kurtis Pykes 's photo
Author
Kurtis Pykes
LinkedIn
Temas

¡Comienza hoy tu viaje como Ingeniero de Datos!

programa

Data Engineer

40hrs hr
Gain in-demand skills to efficiently ingest, clean, manage data, and schedule and monitor pipelines, setting you apart in the data engineering field.
Ver detallesRight Arrow
Comienza El Curso
Ver másRight Arrow
Relacionado

blog

La Guía de Certificación Kafka para Profesionales de los Datos

Aprende a avanzar en tu carrera con las certificaciones Confluent Certified Developer (CCDAK) y Administrator (CCAAK), obteniendo la experiencia y el reconocimiento necesarios para destacar en la gestión y el flujo de datos.
Adejumo Ridwan Suleiman's photo

Adejumo Ridwan Suleiman

13 min

blog

¿Qué es una base de datos de grafos? Guía para principiantes

Explora el intrincado mundo de las bases de datos de grafos con nuestra guía para principiantes. Comprende las relaciones entre datos, profundiza en la comparación entre bases de datos de grafos y relacionales, y explora casos prácticos de uso.
Kurtis Pykes 's photo

Kurtis Pykes

11 min

blog

20 proyectos de análisis de datos para todos los niveles

Explora nuestra lista de proyectos de análisis de datos para principiantes, estudiantes de último curso y profesionales. La lista consta de proyectos guiados/no guiados y tutoriales con código fuente.
Abid Ali Awan's photo

Abid Ali Awan

17 min

tutorial

Primeros pasos con AWS Athena: Guía práctica para principiantes

Esta guía práctica te ayudará a empezar a utilizar AWS Athena. Explora su arquitectura y características y aprende a consultar datos en Amazon S3 utilizando SQL.
Tim Lu's photo

Tim Lu

28 min

tutorial

Tutorial de GitHub y Git para principiantes

Un tutorial para principiantes que muestra cómo funciona el control de versiones Git y por qué es crucial para los proyectos de ciencia de datos.
Abid Ali Awan's photo

Abid Ali Awan

17 min

tutorial

Guía completa para el aumento de datos

Aprende sobre técnicas, aplicaciones y herramientas de aumento de datos con un tutorial de TensorFlow y Keras.
Abid Ali Awan's photo

Abid Ali Awan

15 min

See MoreSee More