ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DataX原理

2022-01-09 09:34:24  阅读:348  来源: 互联网

标签:Task 数据源 TaskGroup Job DataX 原理 通道


一、概述

1. 设计理念


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

2. 架构设计


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

二、核心概念

1. Job、Task Group与Task


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

3. Channel(通道)


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。

图示

  • 详细图
  • 简图

四、参考资料

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

标签:Task,数据源,TaskGroup,Job,DataX,原理,通道
来源: https://www.cnblogs.com/bettergoo/p/15780318.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有