Es una herramienta de Spring Cloud para procesado de datos en Streaming o en Batch utilizando tareas programadas.
La idea es tener una serie de microservicios desplegados en una plataforma (Kubernetes por ejemplo) que forman un pipeline de procesado de datos.
Características
Spring Cloud Data Flow es una plataforma para crear pipelines de procesado de datos desarrollada en Spring Boot bajo la plataforma Spring Cloud, lo que permite, entre otras cosas:
- Despliegues en local: Para hacer pruebas en local de pipelines. Puede desplegarse como aplicación normal o dockerizada.
- Despliegue en Cloud en cluster de Kubernetes mediante Helm o como una aplicación más. Interactuará con Kubernetes para gestionar el despliegue de tareas programadas como cron-jobs, usando un docker registry como fuente origen de las imágenes para desplegar los jobs como contenedores.
- Dispone de una consola web que permite la visualización y gestión de los pipelines.
- Se integra con plataformas de seguridad OAuth.
- Permite integración con plataformas CI/CD a través de su API Rest.
- Oficialmente soporta las plataformas de Kubernetes y Cloud Foundry, pero hay proyectos de comunidades que soportan OpenShift, Nomad y Apache Mesos.
Arquitectura
Spring Cloud Data Flow tiene dos pilares fundamentales:
Procesado de Streams: Sirve para ejecución de trabajos de ETL en tiempo real basados en ejecución de tareas dentro de un pipeline donde cada etapa es una aplicación independiente y que se comunican a través de eventos (Kafka o Rabbit).
Se distinguen tres tipos de Nodos:
- Source: Son los nodos que reaccionan ante un evento e inician el procesado.
- Processor: Son transformaciones y procesados que se hacen sobre el evento liberado por los Source.
- Sink: Son nodos finales, reciben datos de los processors y generan información final.

Figura 1: Esquema de un Stream.
Procesado Batch: En este caso los microservicios desarrollados deben ir dejando resultados de la ejecución para su monitorización. Dichos microservicios se desarrollan bajo las plataformas de Spring Cloud Task y Spring Cloud Batch. Se distinguen dos entidades básicas:
- Task: Son procesos de corta duración que se ejecutan en microservicios.
- Job: Son entidades que encapsulan una serie de pasos o Steps (al menos 1) que constituyen el procesado batch.
- Step: Es un objeto de dominio que encapsula una fase secuencial dentro de un proceso batch. Cada Step tiene un ItemReader, un ItemProcessor y un ItemWriter.

Figura 2: Esquema de un Batch.
Despliegue: Spring Cloud Data Flow despliega como un microservicio más aunque dispone de permisos para acceder a la plataforma donde ha sido desplegado lo que le permite ejecutar despliegues y planificar trabajos. Esto es posible gracias al módulo de Service Provider Iterface que trae por defecto mecanismos para conectar a Kubernetes y Cloud Foundry.
CI/CD: Spring Cloud Data Flow permite integrarse dentro de flujos de Integración y Despliegue Continuos gracias a su api REST. El esquema de integración quedaría como sigue:

Figura 3: Esquema de despliegue en CI/CD.
Puedes obtener más información y ejemplos prácticos aquí.
José Luis Antón Bueso, Solution Architect en Altia.