DataX原理

一、概述

1. 设计理念

DataX原理
为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

2. 架构设计

DataX原理
DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

二、核心概念

1. Job、Task Group与Task

DataX原理
根据切分策略将一个 Job 切分成多个 Task,根据分配策略将多个 Task 组成一个 TaskGroup。

Task

Job 的最小执行单元,一个 Job 可根据 Reader 端切分策略,且分成若干个 Task,以便于并发执行。

Task Group

一组 Task 的集合,根据 DataX 的公平分配策略,公平地分配 Task 到对应的 TaskGroup 中。一个 TaskGroup 对应一个 TaskGroupContainer,负责执行一组 Task。

Job

在 DataX 中用来描述一个源端到一个目的端的同步作业,是 DataX 数据同步面向用户的最小业务单元。一个Job 对应 一个 JobContainer, JobContainer 负责 Job 的全局切分、调度、前置语句和后置语句等工作。

2. Reader、Writer与Transformer

DataX原理
DataX 可支持任意数据源到数据源,只要实现了 Reader/Writer Plugin,官方已经实现了主流的数据源插件,比如 MySQL、Oracle、SQLServer 等,也可以开发一个 DataX 插件。
DataX 默认提供了丰富的数据转换实现类,用户还可以根据项目自身需求,扩展数据转换。

3. Channel(通道)

DataX原理
DataX 会单独启动一条线程运行运行一个 Task,而 Task 会持有一个 Channel,用作 Reader 与 Writer 的数据传输媒介,DataX 的数据流向都是按照 Reader—>Channel—>Writer 的方向流转。
Channel 作为传输通道,即能充当缓冲层,同时还能对数据传输进行限流操作。

三、调度流程

1. 任务切分

1)计算并发量

并发量即,所需通道数量(needChannelNumber)。

  • 按表数量
    配置了每个通道处理1张表,那么同时处理100张表,就需要100个通道

  • 按记录数
    配置了每个通道处理1000条记录,那么同时处理10000条记录,就需要10个通道

  • 按流量
    ......

2)任务切分

将Job切分成多个Task:根据所需通道数量将Job切分成多个Task

  • 如果用户配置了具体的 Table 数量,那么就按照 Table 为最小单元进行拆分(即一个 Table 对应一个 Task),并生成对应的 querySql;
  • 如果用户还配置了 splitPk,则会根据 splitPk 进行切分,具体逻辑是根据 splitPk 区间对 Table 进行拆分,并生成对应的 querySql。

2. 任务分配

1)配置通道数量(ChannelNumber)
2)设置每个TaskGroup分配的通道数(默认为每个TaskGroup分配5个通道)
3)计算TaskGroup数量=通道数量/每个TaskGroup分配的通道数
4)将Task平均分配至每个TaskGroup

3. 调度策略示例

目标

构建了一个数据同步作业,该作业的目的是将 MySql 的 100 张表同步到 Oracle 库中。
且此时设置了 20 个并发(即 channelNumber=20)。

调度步骤

  1. 按表数量计算,需要100个通道(Channel);
  2. 将此Job切分成 100 个 Task;
  3. DataX 默认给每个 TaskGroup 分配 5 个 Channel,因此 taskGroupNumber = channelNumber / channelsPerTaskGroup = 20 / 5 = 4;
  4. 根据 DataX 的公平分配策略,会将 100 个 Task 平均分配给每个 TaskGroup,因此每个 TaskGroup 处理 taskNumber / taskGroupNumber = 100 / 4 = 25 个 Task。

图示

  • 详细图
    DataX原理
  • 简图
    DataX原理

四、参考资料

  1. 图解 DataX 核心设计原理:https://segmentfault.com/a/1190000023925704
  2. DataX介绍:https://blog.csdn.net/burpee/article/details/53734393
上一篇:DATAX


下一篇:DataX,FlinkX