技术编程|图解 DataX 核心设计原理( 二 )
文章图片
文章图片
调度流程
DataX 将用户的 job.json 同步作业配置解析成一个 Job , DataX 通过 JobContainer 完成全局切分、调度、前置语句和后置语句等工作 , 整体调度流程用如下图表示:
文章图片
文章图片
1、切分策略
1)计算并发量(即 needChannelNumber 大小)
DataX有流控模式 , 其中 , 可以设置 bps 限速 , tps 限速:
bps 限速:needChannelNumber = 总 byteLimit / 单个 Channel byteLimit
tps 限速:needChannelNumber = 总 recordLimit / 单个 Channel recordLimit
如果以上都没有设置 , 则会根据用户在 job.setting.speed.channel 配置的并发数量设置 needChannelNumber 。
2)根据 needChannelNumber 将 Job 切分成多个 Task
这个步骤的具体切分逻辑交由相关插件去完成 , 例如 Rdb 对数据的拆分主要分成两类:
如果用户配置了具体的 Table 数量 , 那么就按照 Table 为最小单元进行拆分(即一个 Table 对应一个 Task) , 并生成对应的 querySql;
如果用户还配置了 splitPk , 则会根据 splitPk 进行切分 , 具体逻辑是根据 splitPk 区间对 Table 进行拆分 , 并生成对应的 querySql 。
2、公平分配策略
DataX 在执行调度之前 , 会调用 JobAssignUtil#assignFairly方法对切分好的 Task 公平分配给每个 TaskGroup 。
在分配之前 , 会计算 TaskGroup 的数量 , 具体公式:inttaskGroupNumber=(int)Math.ceil(1.0*channelNumber/channelsPerTaskGroup);
channelNumber 即为在切分策略中根据用户配置计算得到的 needChannelNumber 并发数量大小 , channelsPerTaskGroup 为每个 TaskGroup 需要的并发数量 , 默认为 5 。
求出 TaskGroup 的数量之后 , 就会执行公平分配策略 , 将 Task 平均分配个每个 TaskGroup , 最后执行调度 , 完成整个同步作业 。举个公平分配策略的例子:
假设 A 库有表 0、1、2 , B 库上有表 3、4 , C 库上有表 5、6、7 , 如果此时有 4 个 TaskGroup , 则 assign 后的结果为:taskGroup-0:0,4,taskGroup-1:3,6,taskGroup-2:5,2,taskGroup-3:1,7
举个例子来描述 Job、Task、Task Group 之间的关系:
用户构建了一个数据同步作业 , 该作业的目的是将 MySql 的 100 张表同步到 Oracle 库中 , 假设此时用户设置了 20 个并发(即 channelNumber=20):
DataX 根据表的数量切分成 100 个 Task;
DataX 默认给每个 TaskGroup 分配 5 个 Channel , 因此 taskGroupNumber = channelNumber / channelsPerTaskGroup = 20 / 5 = 4;
根据 DataX 的公平分配策略 , 会将 100 个 Task 平均分配给每个 TaskGroup , 因此每个 TaskGroup 处理 taskNumber / taskGroupNumber = 100 / 4 = 25 个 Task 。
以上的例子用如下图表示:
文章图片
文章图片
由于一个 Channel 对应一个线程执行 , 因此 DataX 的线程模型可以用如下图表示:
【技术编程|图解 DataX 核心设计原理】
文章图片
文章图片
推荐阅读
- 行业互联网|华为 | 车载以太网物理层及TSN发展现状 与技术趋势
- 技术编程|什么是Plesk虚拟主机控制面板?
- 电池技术|法国发明出世界最快的电极:可将锂电池的密度提高3倍
- 技术编程|人工智能在大视频运维中如何实现CDN硬盘故障预测?
- 电池技术|关于惠州赣锋建设高端聚合物锂电池研发及生产基地建设,赣锋锂业要干大事
- |加速冲刺世界级技术领先地位,大族机器人获1.65亿元A轮融资
- 解码器|苹果 ProRes 视频编解码器获 2020 技术工程艾美奖
- 数据|徐叶润:另类数据技术是驱动资管科技的核心
- 中年|《经济学人》封面文章解析蚂蚁集团:数字技术的崛起代表了金融的未来
- 行业互联网|北科院轻工所技术入选中关村论坛技术交易大会“产业创新领先技术百强项目榜单”
