Este script es un ejemplo sencillo de producción y consumo de mensajes en Apache Kafka, gestionando particiones en paralelo mediante múltiples procesos, lo que simula una granja de productores y consumidores para ejecutar tareas de forma concurrente y eficiente.
- Producción Paralela de Mensajes: Genera y envía mensajes simultáneamente a un conjunto específico de particiones de un tópico Kafka.
- Consumo Paralelo de Mensajes: Los mensajes son consumidos por varios grupos consumidores, cada grupo asignado a una partición, asegurando un procesamiento distribuido en paralelo.
- Multiprocesamiento: Utiliza el módulo multiprocessing de Python para ejecutar tanto la producción como el consumo de mensajes en paralelo, proporcionando alta concurrencia y eficiencia.
- Python 3.11 o superior: Para la ejecución del script.
- Apache Kafka: Para la gestión de tópicos y mensajes.
- Zookeeper: Para la coordinación y gestión de Kafka.
- Docker y Docker Compose: Para el arranque rápido de Kafka y Zookeeper si prefieres usar contenedores.
pip install -r requirements.txt
docker-compose up -d
El script acepta varios parámetros para configurar la conexión a Kafka y la gestión de tópicos. Aquí están los parámetros más importantes:
--server: Dirección del servidor Kafka (por defecto: 127.0.0.1:29092).
--topic: Nombre del tópico Kafka (por defecto: my-kafka-topic).
--num_messages: Número de mensajes a enviar a cada partición (por defecto: 20).
--num_partitions: Número de particiones/grupos del tópico (por defecto: 3).
--delay: Retraso entre los mensajes enviados por el productor en segundos (por defecto: 0).
--output: Archivo de salida donde se guardarán los mensajes consumidos (por defecto: stdout).
Primero, asegúrate de que Kafka esté corriendo y que hayas creado el tópico con el número de particiones especificado. Luego, puedes ejecutar el script de la siguiente manera:
python run.py --topic=pizza --num_messages=50 --num_partitions=2
Este comando produce y consume mensajes de un tópico llamado pizza
.
Envía 50 mensajes a cada una de las 2 particiones del tópico.
Los mensajes consumidos se escriben en el standard output.