datax3数据同步

(1)地址:GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。

 (2)介绍的文章就比较多了,在这里想分析一下 具体是如何设计的以及使用到哪些巧妙的设计

1、自定义json的结构,然后映射到Configuration中,通过Configuration中的方法可以方便的获取对应JOB的配置参数,插件的自定义参数,任务的配置参数, 

2、插件+框架的组合 实现基本的扩展,为了防止不同组件之间类的隔离,使用自定义类加载器,在jobContainer启动的时候,加载组件使用自定义类加载器URLClassLoader,真正在运行到那些插件的时候,就会使用自定义类加载,这个点设计的很巧妙。目前加载某个插件,不会加载所有的插件,而是懒加载,就是使用某个job使用哪个的时候,发现为空,才会去加载对应的插件到内存中。

3、一个任务就是一个JVM的进程,一个任务的执行就是一个模版设计模式,init,perpare,split,schedule,post  最终java的多态会走到 自定义的reader和writer的插件中。

4、schedule是任务的分割与执行,每一个TaskGroupContainer 都会运行在一个线程中,一个TaskGroupConatiner中有多个Task处理。因此Task内部为了加速task的快速执行因此也需要使用多线程并发的方式进行执行,TaskExecutor 抽象为一个任务的执行封装体。这个类主要为一个任务的执行,目前看一个任务的执行,会再次创建2个线程一个Reader线程,一个Writer线程,二个线程之间通过ArrayBlockingQueue进行数据的通信,也就是生产者和消费者的设计方式,必须用到ReetrantLock Condiition 进行控制并分。设计的也是很合理。如果有10个Task,5个线程,5个运行中,其它的5个只能等待,cpu自旋等待

5、任务基本的流程就是:

读取插件:将源数据库中的东西转换为Record放到MemoryChannel中,也就是需要将开源的数据字段类型转换为 datax的内部数据类型

写入插件:将Channle中的数据获取到,然后写入到开源的数据库中,需要将record字段类型转换为开源类型。

这也就是需要定义内部的Datax数据类型,然后支持各种数据类型进行转换

java基础用到了哪些东西:commons-cli包的命令行的解析,配置文件到类的映射,反射,类加载器隔离,多线程,线程池,生产者与消费者,多线程并发控制,线程之间的协调,AQS的原理基本理解,多态

目前看只有单机版本的执行,怎么设置周期任务,数据源之间的依赖,然后在数据同步。

最后还需要做一个web系统 配置各种数据源,然后设置周期调度的时间,进行定时的数据全量或者增量的数据同步,分钟,小时的数据同步。

个人觉得 分布式调度系统获取所有的同步任务,分发到不同的机器中,然后多个机器分别执行task任务,这样就分布式进行执行了

国内github:

Gitee 极速下载/alibaba datax

datax编译打包:

DataX源码打包编译采坑记_点点的博客-CSDN博客_datax 编译

datax的docker打包:

通过Dockerfile来部署datax容器 - 百里登峰 - 博客园

datax可视化:

DataX Web首页、文档和下载 - 分布式数据同步工具 - OSCHINA - 中文开源技术交流社区

datax-web: DataX集成可视化页面,选择数据源即可一键生成数据同步任务,支持批量创建RDBMS数据同步任务,集成开源调度系统,支持分布式、增量同步数据、实时查看运行日志、监控执行器资源、KILL运行进程、数据源信息加密等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值