本文基于IT技术圈(西安)10月线下沙龙整理。
总览
- 什么是ETL
- ETL能干什么
- 了解Spring Cloud Data Flow
- 其他ETL工具
什么是ETL
ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。

ETL能干什么
- 决策支持系统(Decision Support System, DSS)
铁路调度系统决策
公安系统破案 - 在线分析处理(On-Line Analytical Processing, OLAP)
城市智能交通,信号灯控制
地图上展示拥堵路段
运维系统日志分析 - 数据挖掘(Data Mining, DM)
改善客户信用评分
物流行业实时跟踪货箱温度
电信行业应用 - 商业智能(Business Intelligence, BI)
处理企业中现有数据,辅助业务或者决策者做出正确且明智的决定

Spring Cloud Data Flow
将企业连接到物联网—移动设备,传感器,可穿戴设备,汽车等。Spring Cloud Data Flow 为创建可组合数据的微服务提供统一的服务,这些服务是基于流和基于ETL的数据处理模式。
Spring Cloud Data Flow可以轻松地针对用例(例如数据提取,实时分析和数据导入/导出)构建和编排云原生数据管道。 通过为最常见的集成方案提供开箱即用的连接器,Spring Cloud Data Flow使连接系统变得简单。
- 支持实时流和批处理数据
- 摄取,转换,分析和存储数据
- FTP,RDBMS,Cassandra,RabbitMQ,GemFire,Redis等连接器
- 支持现代消息中间件:Kafka和RabbitMQ
- Spring Flo管道视觉设计器
- 操作 Dashboard:指标,运行状况检查和远程管理
- 支持的平台:Cloud Foundry,Kubernetes,Apache YARN和Apache Mesos
系统架构
- 服务器组件
- 应用程序类型
Long-lived Applications
Short-lived Applications - 微服务架构风格
- 预置应用程序
- 监控
- 部署平台
服务器组件
Data Flow Server
Skipper Server

服务器组件
Spring Cloud Data Flow Server将流应用程序的部署和运行时状态委派给Spring Cloud Skipper Server。从而使它具有在运行时在Stream中更新和回滚应用程序的功能,以及将应用程序部署到多个平台的功能。Spring Cloud Data Flow Server 还负责:
- 通过解释和执行Stream DSL,来确定多个长期存活的应用程序的数据流逻辑。
- 启动一个长期存活的任务应用程序。
- 解释和执行组合任务DSL,确定多个短期存活应用程序的数据流逻辑。
- 执行应用程序到运行时映射的部署清单 – 例如,设置初始实例数,内存要求和数据分区。
- 提供已部署应用程序的运行时状态。
应用程序类型
Long-lived Applications (Streams)
长期存活的应用程序。这些应用程序可以是Stream的一部分,在这种情况下,通过消息传递中间件消耗或生成无限量的数据。或者,它们可以是长期存在的任意应用程序,并且不一定使用消息传递中间件。
Short-lived Applications (Tasks)
处理有限的数据集然后终止。
通常会基于Spring Cloud Stream框架编写长期应用程序,而基于Spring Cloud Task或Spring Batch框架则编写短期应用程序。
Long-lived Applications (Streams)
- source – 连接到外部资源以轮询接收数据,并发布到默认“输出”通道;
- processor – 从“输入”通道接收数据并对其进行处理,将结果发送到默认的“输出”通道上;
- sink – 连接到外部资源的接收器,将接收的数据发送到默认的“输入”通道。
Streams
Stream是一组长期存活的Spring Cloud Stream应用程序,它们通过消息中间件相互通信。
- 管道流
- 并行流
管道流
dataflow:>app register --name http --type source --uri maven://org.springframework.cloud.stream.app:http-source-rabbit:1.2.0.RELEASE
Successfully registered application 'source:http'
dataflow:>app register --name log --type sink --uri maven://org.springframework.cloud.stream.app:log-sink-rabbit:1.1.0.RELEASE
Successfully registered application 'sink:log‘
dataflow:>stream create --name httpStream --definition "http | log"

并行流
dataflow:> stream create --definition "orderGeneratorApp || baristaApp || hotDrinkDeliveryApp || coldDrinkDeliveryApp" --name orderStream

Short-lived Applications (Tasks)
task – 可以执行短期任务
单任务
dataflow:> app register --name timestamp --type task --uri maven://org.springframework.cloud.task.app:timestamp-task:2.1.0.RELEASE
dataflow:> task create tsTask --definition "timestamp"

组成任务
dataflow:> task create simpleComposedTask --definition "task1 && task2"

微服务架构风格
使用Spring Cloud Stream和Spring Cloud Task时,每个微服务应用程序都以Spring Boot作为基础库构建。 这提供了所有微服务应用程序功能,例如运行状况检查,安全性,可配置的日志记录,监视和管理功能,以及可执行的JAR打包。
需要强调的是,这些微服务应用程序是“常规的应用程序”,可以使用java -jar并传入适当的配置属性来自行运行。 创建自己的微服务应用程序以进行数据处理类似于创建其他Spring Boot应用程序。 您可以通过使用Spring Initializr网站开始创建基于Stream或基于Task的微服务的基本框架。
监控
在spring2.x之后,Spring boot actuator使用了Micrometer来实现监控。

其他ETL工具
商用ETL工具软件:
Informatica、IBM DataStage、Microsoft SSIS 、Oracle ODI
开源ETL工具软件:
Kettle 、Talend、CloverETL、Octopus
参考资料
https://docs.spring.io/spring-cloud-dataflow/docs/2.2.1.RELEASE/reference/htmlsingle/
https://dataflow.spring.io/docs/concepts/architecture/