DataX 简介及架构原理
概述
DataX
是阿里巴巴使用 Java 和 Python 开发的一个异构数据源
离线同步工具-异构数据源
:不同存储结构的数据源- 致力于实现包括关系型数据库 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS等各种
异结构数据源之间
稳定高效的数据同步功能
- Sqoop 是用于在与 RDBMS 之间数据迁移工具
- DataX 是阿里开源的一个异构数据源离线同步工具(任意两种数据源之间)
图解
DataX 设计理念
- 1、为了解决异构数据源同步问题,DataX将
复杂的网状的同步链路
变成了星型数据链路
,DataX作为中间传输载体
负责链接各种数据源 - 2、当需要接入一个新的数据源的时候,只需要将此数据源
对接
到DataX,变能跟已有的数据源做到无缝数据同步
DataX 框架设计
1、DataX 本身作为离线数据同步框架,采用 Framework + plugin 架构构建
Framework
主题框架+plugin
插件- 1、将
软件核心功能
写入 Framework 主体框架中 - 2、主体框架
为插件预留接口
,如果后期需要什么新功能,可以再去开发插件实现,而主体框架无需改动
- 扩展性强
- 1、数据同步核心功能为主题
- 2、不断的去新增某数据源的支持,对不同数据源的读取或写入功能,以插件的形式开发
- 3、如果需要新功能只需要开发插件即可,不需要动主体框架
2、将数据源读取和写入抽象成为 Reader/Writer 插件,纳入到整个同步框架中
架构功能详解
分类
Reader
:数据采集模块- 负责采集
数据源的数据,将数据发送
给FrameworkWriter
:数据写入模块- 负责不断向 Framework 取数据
,并将数据写入
到目的端Framework
:用于连接 reader 和 writer- 作为两者的数据传输通道
- 并处理缓冲、流控、并发、数据转换
等核心技术问题
Framework 功能说明
缓冲
- 1、Reader 和 Writer 可能会有读写速度不一致
的情况- 2、所以中间需要一个组件作为缓冲
,缓冲的功能就位于 Framework 中
流控
- 1、流控:控制数据传输的速度
- 2、Sqoop不具备
流控功能- 3、DataX 可以随意根据需求调整
数据传输速度- 4、流控功能也位于 Framework 中
并发
- 1、并发的同步或写入数据
- 2、也可以控制速度
,想要速度快点,设置并发高一点,反之亦然数据转换
- 1、既然是异构,那么说明读 Reader 的数据源与 写 Writer 的数据源数据结构可能不同
- 2、数据结构不同的话,需要做数据转换操作
,转换也在 Framework 中完成
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
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 数据源进行同步
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 需要将每张分表的数据都同步过来
.
本文转载自: https://blog.csdn.net/weixin_51967583/article/details/122779251
版权归原作者 夏初夏那 所有, 如有侵权,请联系我们删除。
版权归原作者 夏初夏那 所有, 如有侵权,请联系我们删除。