技术编程|图解 DataX 核心设计原理
DataX 是阿里巴巴开源的一个异构数据源离线同步工具 , 致力于实现包括关系型数据库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各种异构数据源之间稳定高效的数据同步功能 。
前段时间我在 K8s 相关文章中有提到过数据同步的项目 , 该项目就是基于 DataX 内核构建的 , 由于公司数据同步的需求 , 还需要在 DataX 原有的基础上支持增量同步功能 , 同时支持分布式调度 , 在「使用 K8s 进行作业调度实战分享」这篇文章中已经详细描述其中的实现 。
基于我在项目中对 DataX 的实践过程 , 给大家分享我所理解的 DataX 核心设计原理 。设计理念
异构数据源离线同步是将源端数据同步到目的端 , 但是端与端的数据源类型种类繁多 , 在没有 DataX 之前 , 端与端的链路将组成一个复杂的网状结构 , 非常零散无法将同步核心逻辑抽象出来 , DataX 的理念就是作为一个同步核心载体连接连接各类数据源 , 当我们需要数据同步时 , 只需要以插件的形式接入到 DataX 即可 , 将复杂的网状结构链路变成了一个星型结构 , 如下图所示:
文章图片
架构设计
用过 IDEA 的小伙都知道 , IDEA 有很多非常棒的插件 , 用户可根据自身编程需求 , 下载相关的插件 , DataX 也是使用这种可插拔的设计 , 采用了 Framework + Plugin 的架构设计 , 如下图所示:
文章图片
有了插件 , DataX 可支持任意数据源到数据源 , 只要实现了 Reader/Writer Plugin , 官方已经实现了主流的数据源插件 , 比如 MySQL、Oracle、SQLServer 等 , 当然我们也可以开发一个 DataX 插件 。核心概念
DataX 核心主要由 Job、Task Group、Task、Channel 等概念组成:
1、Job
在 DataX 中用来描述一个源端到一个目的端的同步作业 , 是 DataX 数据同步面向用户的最小业务单元 。一个Job 对应 一个 JobContainer , JobContainer 负责 Job 的全局切分、调度、前置语句和后置语句等工作 。
2、Task Group
一组 Task 的集合 , 根据 DataX 的公平分配策略 , 公平地分配 Task 到对应的 TaskGroup 中 。一个 TaskGroup 对应一个 TaskGroupContainer , 负责执行一组 Task 。
3、Task
Job 的最小执行单元 , 一个 Job 可根据 Reader 端切分策略 , 且分成若干个 Task , 以便于并发执行 。
【技术编程|图解 DataX 核心设计原理】Job、Task Group、Task 三者之间的关系可以用如下图表示:
文章图片
根据切分策略将一个 Job 切分成多个 Task , 根据分配策略将多个 Task 组成一个 TaskGroup 。
4、Channel
DataX 会单独启动一条线程运行运行一个 Task , 而 Task 会持有一个 Channel , 用作 Reader 与 Writer 的数据传输媒介 , DataX 的数据流向都是按照 Reader—>Channel—>Writer 的方向流转 , 用如下图表示:
文章图片
Channel 作为传输通道 , 即能充当缓冲层 , 同时还能对数据传输进行限流操作 。
5、Transformer
DataX 的 transformer 模式同时还提供了强大的数据转换功能 , DataX 默认提供了丰富的数据转换实现类 , 用户还可以根据项目自身需求 , 扩展数据转换 。
文章图片
调度流程
DataX 将用户的 job.json 同步作业配置解析成一个 Job , DataX 通过 JobContainer 完成全局切分、调度、前置语句和后置语句等工作 , 整体调度流程用如下图表示:
文章图片
1、切分策略
1)计算并发量(即 needChannelNumber 大小)
DataX有流控模式 , 其中 , 可以设置 bps 限速 , tps 限速:
推荐阅读
- 烹饪|锡纸烧烤技术,三款酱料配方是关键,制作好酱料锡纸类菜品轻松做
- 芯片|我国开始技术封锁!除量子密码以外,还有一项让美国憋屈十几年
- 上海嘉定|一项专利技术使车库车位增多10%,开发商们要坐不住了
- 上海市科学技术委员会|关于做好制订因公出国(境)培训中期规划的补充通知
- 闲情居|华为云手机发布,真正的5G手机,绕过光刻机的技术壁垒
- 一味宠爱|最全盘点卡中国脖子的35项技术,折射中国工业水平的真实现状
- 季报|趣店季报图解:营收同比降47% 净利1.8亿降84%
- 映璇汽车工作室|终于知道它为啥难卖了,看完长城WEY内部技术团队做的竞品分析
- Java|计算机专业的本科生,该选择学习Java技术体系还是.NET技术体系
- 人员|计划到期!立昂技术:部分董事、高管人员累计减持约47万股