Evolución de la Arquitectura
Fase 1: Flink en Hadoop YARN + Apache Airflow
- Stack técnico:
- Apache Flink: Procesamiento de flujos con baja latencia
- Hadoop YARN: Gestión de recursos en clúster existente
- Apache Airflow: Orquestación de trabajos y dependencias
- Implementación:
- Jobs empaquetados en JAR almacenados en S3
- Airflow DAG define lanzamiento y dependencias
- ApplicationMaster de YARN inicia clúster Flink
- Desafíos:
- Incompatibilidad entre el modelo batch de Airflow y flujos continuos
- Punto único de fallo en el scheduler de Airflow
- Alta complejidad en DAGs para casos simples
- Contexto técnico fragmentado para desarrolladores
Fase 2: Flink en YARN + Scheduler Ligero
- Innovaciones:
- Scheduler personalizado para gestión de jobs
- Kubernetes para despliegue del scheduler
- Apache Zookeeper para metadata y estado
- Arquitectura:
- Nodos maestros gestionan metadatos con Zookeeper
- Workers menejan ciclo de vida de jobs en YARN
- Despliegue del scheduler en Kubernetes
- Limitaciones:
- Falta de estandarización en CI/CD
- Gestión de secretos insuficiente en YARN
- Aislamiento limitado de recursos y dependencias
- Complejidad en descubrimineto de servicios
Fase 3: Flink en Kubernetes Nativo
- Tecnologías clave:
- Kubernetes para orquestación y scheduling
- Amazon ECR para almacenamiento de imágenes
- Zookeeper/ETCD/S3 para gestión de estado
- Service Mesh para comunicación interna
- Ventajas:
- CI/CD estandarizado con pipelines automáticos
- Gestión nativa de secretos via Kubernetes Secrets
- Aislamiento mediante namespaces específicos
- Descubrimiento de servicios integrado vía DNS
- Monitoreo unificado con sidecars especializados
Componentes Clave en Kubernetes
- Configuración mediante manifiestos YAML
- Imágenes Docker almacenadas en ECR
- Integración CI/CD para despliegues automáticos
- Portal centralizado para gestión de jobs
- Arquitectura por jobs con recursos dedicados
- Sidecars para logging y métricas
Implementación Técnica
1. Construcción de Imagen Docker
# Imagen base de Flink
FROM flink:1.17.0-scala_2.13-java17
# Copiar artefactos
COPY target/stream-processor.jar /opt/flink/jobs/
COPY conf/flink-custom.yaml /opt/flink/conf/
# Comando de ejecución
CMD ["bin/flink", "run", "/opt/flink/jobs/stream-processor.jar"]
2. Despliegue en Kubernetes
# Construir imagen
docker build -t data-processor:2.0.0 .
# Publicar en registro
docker tag data-processor:2.0.0 123456789012.dkr.ecr.us-east-1.amazonaws.com/data-processor:2.0.0
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/data-processor:2.0.0