DataX 简介及架构原理
概述
-
DataX
是阿里巴巴使用 Java 和 Python 开发的一个异构数据源
离线同步工具异构数据源
:不同存储结构的数据源
-
致力于实现包括关系型数据库 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS等各种
异结构数据源之间
稳定高效的数据同步功能
- Sqoop 是用于在与 RDBMS 之间数据迁移工具
- DataX 是阿里开源的一个异构数据源离线同步工具(任意两种数据源之间)
- 1
- 2
图解
DataX 设计理念
-
1、为了解决异构数据源同步问题,DataX将
复杂的网状的同步链路
变成了星型数据链路
,DataX作为中间传输载体
负责链接各种数据源 -
2、当需要接入一个新的数据源的时候,只需要将此数据源
对接
到DataX,变能跟已有的数据源做到无缝数据同步
DataX 框架设计
1、DataX 本身作为离线数据同步框架,采用 Framework + plugin 架构构建
Framework
主题框架+plugin
插件- 1、将
软件核心功能
写入 Framework 主体框架中 - 2、主体框架
为插件预留接口
,如果后期需要什么新功能,可以再去开发插件实现,而主体框架无需改动
- 扩展性强
- 1、数据同步核心功能为主题
- 2、不断的去新增某数据源的支持,对不同数据源的读取或写入功能,以插件的形式开发
- 3、如果需要新功能只需要开发插件即可,不需要动主体框架
- 1
- 2
- 3
- 4
2、将数据源读取和写入抽象成为 Reader/Writer 插件,纳入到整个同步框架中
架构功能详解
分类
-
Reader
:数据采集模块- 负责
采集
数据源的数据,将数据发送
给Framework
- 负责
-
Writer
:数据写入模块- 负责
不断向 Framework 取数据
,并将数据写入
到目的端
- 负责
-
Framework
:用于连接 reader 和 writer- 作为两者的
数据传输通道
- 并处理
缓冲、流控、并发、数据转换
等核心技术问题
- 作为两者的
Framework 功能说明
-
缓冲
- 1、Reader 和 Writer 可能会有
读写速度不一致
的情况 - 2、所以中间需要一个组件
作为缓冲
,缓冲的功能就位于 Framework 中
- 1、Reader 和 Writer 可能会有
-
流控
- 1、
流控:控制数据传输的速度
- 2、Sqoop
不具备
流控功能 - 3、DataX 可以随意
根据需求调整
数据传输速度 - 4、流控功能也
位于 Framework 中
- 1、
-
并发
- 1、并发的
同步或写入数据
- 2、也
可以控制速度
,想要速度快点,设置并发高一点,反之亦然
- 1、并发的
-
数据转换
- 1、既然是异构,那么说明读 Reader 的数据源与 写 Writer 的数据源
数据结构可能不同
- 2、数据结构不同的话,需要做
数据转换操作
,转换也在 Framework 中完成
- 1、既然是异构,那么说明读 Reader 的数据源与 写 Writer 的数据源
DataX 的运行流程
说明
- DataX 作业生命周期的时序图
结构
-
Job
- 单个数据同步的作业,称为
一个Job
,一个Job启动一个进程
- 单个数据同步的作业,称为
-
Task
-
1、根据
不同数据源切分策略
,一个Job会切分多个Task
- 并行执行
-
2、Task 是
DataX作业的最小单元
,每个Task负责
一个部分数据的同步工作
-
-
TaskGroup
- 1、
Scheduler 调度模块
会对Task 进行分组
,每个Task 组称为一个Task Group
- 2、每个Task Group 负责以一定的并发度运行其所分得的Task ,
单个TaskGroup的并发为5
- 1、
-
Reader -> Channel -> Writer
-
每个Task启动后
,都会固定启动
Reader -> Channel -> Writer 的线程
来完成工作Channel
类似于 Flume 中的 MemoryChannel 来做数据的缓冲
-
具体流程
- 1、DataX同步数据的作业称之为一个
Job
- 2、一个Job会根据
不同数据源
的策略,将Job切分
为多个Task - 3、
Task
是执行同步数据作业的最小单元
,每个Task会负责一部分的数据
同步工作 - 4、多个Task是如何执行的呢,谁先执行谁后执行呢?
- 5、由
Schedule 调度模块
对Task 进行分组
,每个组称之为一个Task Group - 6、每个组都有一个并发度,一个组的
并发度是5
- 7、最多情况下一个Task Group,能够同时运行5 个Task
- 8、
每个
Task启动后,都会固定启动
Reader -> Channel -> Writer 的线程
来完成工作
DataX 调度决策思路
案例
- 1、用户提交了一个DataX 作业,并且配置了总的并发度为 20,
- 2、目的是对一个 有100张分表的 mysql 数据源进行同步
- 1
- 2
-
DataX 的调度决策思路
- 1、DataX Job 根据分库分表切分策略,将同步工作分成 100个Task
- 2、根据配置的总的并发度20,以及每个Task Group 的并发度 5,
- 3、DataX 计算共需要分配 4的Task Group
- 4、4个 TaskGroup 平分 100 个Task ,每一个TaskGroup 负责运行 25个Task
描述
-
1、
总的并发度
为20- 1、整个Job 的并发度
- 2、表示整个Job 最多能同时运行 20个Task
-
2、
什么是分表
-
1、如果 MySQL 中单表的数据量过大,它的性能会急剧下降
-
2、解决方法
- 1、分表,将一张表的数据分到多张表中
- 2、每张表的结构一致
- 3、类似于对表做 Hash分区
-
3、描述
- 1、物理分区,逻辑还是同一张表
- 2、所以DataX 需要将每张分表的数据都同步过来
-
.