一、简介
- 概述
- DataX 是阿里云DataWorks数据集成的开源版本,在阿里巴巴集团被广泛使用的离线数据同步工具/平台。 DataX实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databend 等各种异构数据源之间高效的数据同步功能。
- 开源地址
- 支持的数据库
类型 | 数据源 | Reader(读) | Writer(写) | 文档 |
RDBMS 关系型数据库 | MySQL | √ | √ | 读 、 写 |
Oracle | √ | √ | 读 、写 | |
OceanBase | √ | √ | 读 、写 | |
SQLServer | √ | √ | 读 、写 | |
PostgreSQL | √ | √ | 读 、写 | |
DRDS | √ | √ | 读 、写 | |
Kingbase | √ | √ | 读 、写 | |
通用RDBMS(支持所有关系型数据库) | √ | √ | 读 、写 | |
阿里云数仓数据存储 | ODPS | √ | √ | 读 、写 |
ADB | √ | 写 | ||
ADS | √ | 写 | ||
OSS | √ | √ | 读 、写 | |
OCS | √ | 写 | ||
Hologres | √ | 写 | ||
AnalyticDB For PostgreSQL | √ | 写 | ||
阿里云中间件 | datahub | √ | √ | 读 、写 |
SLS | √ | √ | 读 、写 | |
图数据库 | 阿里云 GDB | √ | √ | 读 、写 |
Neo4j | √ | 写 | ||
NoSQL数据存储 OTS | √ | √ | 读 、写 | |
Hbase0.94 | √ | √ | 读 、写 | |
Hbase1.1 | √ | √ | 读 、写 | |
Phoenix4.x | √ | √ | 读 、写 | |
Phoenix5.x | √ | √ | 读 、写 | |
MongoDB | √ | √ | 读 、写 | |
Cassandra | √ | √ | 读 、写 | |
数仓数据存储 | StarRocks | √ | √ | 读 、写 |
ApacheDoris | √ | 写 | ||
ClickHouse | √ | √ | 读 、写 | |
Databend | √ | 写 | ||
Hive | √ | √ | 读 、写 | |
kudu | √ | 写 | ||
selectdb | √ | 写 | ||
无结构化数据存储 | TxtFile | √ | √ | 读 、写 |
FTP | √ | √ | 读 、写 | |
HDFS | √ | √ | 读 、写 | |
Elasticsearch | √ | 写 | ||
时间序列数据库 | OpenTSDB | √ | 读 | |
TSDB | √ | √ | 读 、写 | |
TDengine | √ | √ | 读 、写 |
- 核心架构
- DataX开源版本支持单机多线程模式完成同步作业运行,如图:
- 核心模块介绍
- DataX完成单个数据同步的作业,我们称之JOB,DataX接受一个job之后,将启动一个进程完成整个同步作业。DataX模块是单个作业的中枢管理节点,承担了数据清理、子任务分切(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
- DataXjob启动后,会根据不同的源端切分策略,将job切分成小的task子任务,以便于并发执行。task是DataX作业的最小单元,每个task会负责一部分数据同步工作。
- 切分后的task,DataJob 会调用Scheduler模块,会根据并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每个TaskGroup负责以完一定并发运行完并分配好的所有Task,默认单任务组并发数量为5。
- 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel---->Writer的线程来完成任务同步工作。
- DataX作业运行起来后,job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后job成功退出,否则异常退出,进程退出值非0
- 调度流程
- 用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps
- DataXJob启动后将分库分表切分成100个task。
- DataJob 会调用Scheduler模块,会根据并发数据量切分成4个组,根据组来平分100个task,每个组负责25个task。