首页 » 架构设计 » 正文

ETL中间件之Spring Cloud Data Flow

本文基于IT技术圈(西安)10月线下沙龙整理。

总览

  • 什么是ETL
  • ETL能干什么
  • 了解Spring Cloud Data Flow
  • 其他ETL工具

什么是ETL

ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。

ETL能干什么

  1. 决策支持系统(Decision Support System, DSS)
    铁路调度系统决策
    公安系统破案
  2. 在线分析处理(On-Line Analytical Processing, OLAP)
    城市智能交通,信号灯控制
    地图上展示拥堵路段
    运维系统日志分析
  3. 数据挖掘(Data Mining, DM)
    改善客户信用评分
    物流行业实时跟踪货箱温度
    电信行业应用
  4. 商业智能(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

系统架构

  1. 服务器组件
  2. 应用程序类型
    Long-lived Applications
    Short-lived Applications
  3. 微服务架构风格
  4. 预置应用程序
  5. 监控
  6. 部署平台

服务器组件

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/