Dominando Apache Kafka en Docker desde sus fundamentos

DOCKER

Si estás buscando una forma práctica de aprender cómo funciona el ecosistema de mensajería en tiempo real Kafka, este post es el punto de partida ideal.

En este post os voy a contar como desplegar Apache Kafka en Docker y a continuación os dejo la url mi repositorio de GitHub, en el que podéis encontrar el código necesario para hacerlo de manera práctica.

https://github.com/fernandocabadas/confluent-kafka

¿Qué es Apache Kafka y Docker?

Antes de profundizar en cómo desplegar Kafka en Docker, os explicaré en que consiste Kafka y Docker.

Apache Kafka

Es una plataforma distribuida de transmisión de eventos que permite publicar, almacenar y procesar flujos de datos en tiempo real. En este post, aprenderás desde lo más básico: cómo los productores envían mensajes y los consumidores los reciben.

Docker

Es una plataforma que permite empaquetar y ejecutar aplicaciones en contenedores aislados. En este proyecto, Docker Compose se utiliza para levantar un clúster de Kafka de manera rápida y sencilla.

Configuración del Entorno

Para comenzar, el repositorio facilita el despliegue del clúster utilizando un archivo docker-compose.yml en la raíz. Una vez activo, puedes crear temas (topics) para tus pruebas iniciales.

Podrás ejecutar un productor y un consumidor básico utilizando Gradle para ver cómo fluyen los mensajes.

Validación de Datos con Schema Registry

El proyecto incluye ejemplos avanzados de Kafka Schema Registry, que permite validar que los mensajes cumplan con un esquema específico (como JSON o Avro). Puedes añadir propiedades para que el tópico valide los esquemas automáticamente y usar comandos curl para registrar nuevas versiones de esquemas de datos, como registros de mascotas ("Pet") con campos de nombre, edad y tamaño.

Procesamiento en Tiempo Real con Kafka Streams

Una de las partes más completas de esta documentación es el uso de Kafka Streams para transformar datos sobre la marcha. El repositorio cubre diversas transformaciones:

  • Transformaciones simples: Filtrado, mapeo (Map) y FlatMap.

  • Transformaciones de ramificación (Branch): Para enviar datos a diferentes tópicos de salida según condiciones.

  • Agregaciones: Operaciones de conteo y reducción (GroupBy).

  • Joins: Uniones de flujos de datos (Inner, Left y Outer Joins).

  • Windowing: Procesamiento de datos en ventanas de tiempo específicas.

Consultas SQL con KSQL Client

Finalmente, el proyecto enseña a interactuar con Kafka de una manera más declarativa mediante KsqlDB. A través de tareas de Gradle y la consola de KSQL, puedes:

  • Crear y borrar Streams y Tablas.

  • Insertar datos y realizar selecciones en tiempo real (SELECT * ... EMIT CHANGES) para monitorear el flujo de información de forma dinámica.

Nota técnica. Todo el código del repositorio está desarrollado en Java. Este material es ideal para desarrolladores que quieran ensuciarse las manos con implementaciones reales de productores, consumidores y lógica de streaming.