DataX 简介及架构原理

DataX 简介及架构原理,第1张

DataX 简介及架构原理 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:数据采集模块

负责采集数据源的数据,将数据发送给framework

Writer:数据写入模块

负责不断向 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 Group2、每个Task Group 负责以一定的并发度运行其所分得的Task ,单个TaskGroup的并发为5

Reader -> Channel -> Writer

每个Task启动后,都会固定启动 Reader -> Channel -> Writer 的线程来完成工作

Channel 类似于 Flume 中的 MemoryChannel 来做数据的缓冲 具体流程

1、DataX同步数据的作业称之为一个Job2、一个Job会根据不同数据源的策略,将Job切分为多个Task3、Task 是执行同步数据作业的最小单元,每个Task会负责一部分的数据同步工作4、多个Task是如何执行的呢,谁先执行谁后执行呢?5、由Schedule 调度模块对Task 进行分组,每个组称之为一个Task Group6、每个组都有一个并发度,一个组的并发度是57、最多情况下一个Task Group,能够同时运行5 个Task8、每个Task启动后,都会固定启动Reader -> Channel -> Writer 的线程来完成工作 DataX 调度决策思路


案例
- 1、用户提交了一个DataX 作业,并且配置了总的并发度为 20,
- 2、目的是对一个 有100张分表的 mysql 数据源进行同步

DataX 的调度决策思路

1、DataX Job 根据分库分表切分策略,将同步工作分成 100个Task2、根据配置的总的并发度20,以及每个Task Group 的并发度 5,3、DataX 计算共需要分配 4的Task Group4、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 需要将每张分表的数据都同步过来


.

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5722593.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存