DataX

201 阅读2分钟

概述

主要用于采集处理业务数据。

是阿里云的DataWorks数据集成的开源版本,在阿里巴巴集团内广泛使用的离线数据同步工具。 解决了数据库之间相互传递数据的问题把网状模型改成了星型模型。当需要插入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

image.png

优势:可靠的数据质量监控、丰富的数据转换功能、精准的速度控制、强劲的同步性能、强壮的容错机制、极简的使用体验

框架

image.png DataX有三个模块:

  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework
  • Writer:Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端
  • Framework(channel):用于连接reader和writer,作为两者的数据传输通道,并处理缓冲、流控、并发、数据转换等核心技术问题
核心模块

1、DataX完成单个数据同步的作业,就是Job,DataX接收到一个Job后,将启动一个进程来完成整个Job同步过程。DataX Job模块是单个作业的中区管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能

2、DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小Task,以便并发执行。Task便是DataX作业的最小单元,每个Task会负责一部分数据同步工作

3、切分多个Task后,DataX会调用Scheduler模块,根据配置的并发数据量,将拆分的Task重新组合,组成TaskGroup,每个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发量为5。

4、每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader->Channel->Writer的线程来完成同步

5、DataX作业运行起来之后,Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出

调度流程

假如一个用户提交了一个DataX作业,并且配置了20并发,目的是将一个200张分表的mysql数据同步到ods里面

1、DataXJob根据分布切分成200Task

2、由于一个TaskGroup默认5个并发量,则20个并发就会分配4个TaskGroup

3、4个TaskGroup平分切分好200个Task,每一个TaskGroup负责以5个并发共计运行50个Task

4、一个TaskGroup分配50个Task,有5个并发,也就是开5个线程,一个线程处理10个Task

抽取策略

小表---全量抽取 大表---增量抽取