Este proyecto implementa un pipeline de datos en tiempo real de principio a fin utilizando Python y Apache Kafka, todo orquestado con Docker Compose. La aplicación simula el envío de datos de sensores a un topic de Kafka, que luego son leídos y procesados por un consumidor en tiempo real.
El entorno levanta un sistema completo que demuestra un patrón de arquitectura orientada a eventos.
- Productor: Un servicio en Python que genera mensajes JSON y los publica en un topic de Kafka.
- Consumidor: Un servicio en Python que se suscribe al topic y procesa los mensajes recibidos.
- Kafka: El broker de mensajería que actúa como intermediario, desacoplando el productor del consumidor.
- Zookeeper: El servicio de coordinación esencial para la gestión del clúster de Kafka.
- Pipeline Completo: Incluye tanto un productor como un consumidor para un ciclo de datos completo.
- Contenerizado: Todo el entorno está definido en Docker y Docker Compose para un despliegue rápido y consistente (
docker compose up). - Configuración Externa: Configuración limpia y centralizada a través de archivos de entorno (
.env) por servicio. - Dockerfile Optimizado: Uso de un
Dockerfilemulti-etapa para crear una imagen final ligera y segura. - Reutilización de Imagen: Demuestra cómo un único
Dockerfilepuede servir para múltiples servicios (productoryconsumidor) sobrescribiendo el comando de ejecución.
- Docker Engine
- Docker Compose (V2 recomendado, comando:
docker compose)
Esta es la forma recomendada para levantar todo el pipeline.
Levanta los servicios:
Este comando construirá la imagen de Python y levantará todos los contenedores en segundo plano.
bash docker compose up -d --build
Puedes ver el sistema en acción revisando los logs de los contenedores.
-
Ver los logs del productor (los mensajes que se envían):
docker compose logs -f kafka-producer-app
Verás líneas como:
Mensaje enviado al topic 'asset_stream'... -
Ver los logs del consumidor (los mensajes que se reciben):
docker compose logs -f kafka-consumer-app
Verás los datos JSON completos que se están recibiendo en tiempo real.
Para modificar el comportamiento de las aplicaciones, edita los archivos correspondientes en la carpeta env/.
Por ejemplo, para cambiar el topic o el intervalo de mensajes del productor, modifica env/producer.env:
# env/producer.env
KAFKA_BROKER=kafka:29092
TOPIC_NAME=telemetry_data # Cambiado de asset_stream
SLEEP_TIME_S=2 # Cambiado de 5