Evolución de la Plataforma Flink en Airbnb: ¿Destino Kubernetes?

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

Etiquetas: Flink Kubernetes YARN Airflow Stream-Processing

Publicado el 7-17 05:45