我们系统的基础数据存放在EBS
中,的有个基础数据同步功能,因为变化频率比较低,所以采用定时加手动的方式同步,每日凌晨三点由ETL工具同步到我们中间表,然后存储过程再处理数据。手动则是程序调用Kettle
脚本同步数据到中间表没然后执行存储过程。刚开始上线时,量较小,也就几万条数据,手动同步比较快,越到后期,数据量逐渐增多,达到一百多万的基础数据,通过Kettle
同步一次得花十多分钟。业务方实在无法忍受,要求我们必须优化。
当初使用Kettle
的原因是处于简单、易操作,通过可视化界面先设计好脚本,获取到ktr
的脚本文件,然后在程序中引入kettle-engine
、metastore
、kettle-core
这三个kettle
相关的包即可在Java程序中执行kettle
的ktr
脚本。当数据量上来后,Kettle
确实有些力不从心了,所以,我们就换成了阿里开源的DataX
。那我们就来尝试下如何整合到程序中吧?
我这边的编译环境是:Windows10
、JDK1.8
、Apache Maven 3.6.3
,运行环境是Linux version 3.10.0-957.el7.x86_64
,Python为Linux自带的2.7.5
,JDK为1.8。
先去Github
下载源码到本地使用mvn -U clean package assembly:assembly -Dmaven.test.skip=true
进行编译.
编译好的压缩包有1.32GB
,我们将其上传到服务器上。上传后解压,如果本机有Python
环境,则不需上传。先用Python
生成同步脚本模版,python datax.py -r {YOUR_READER} -w {YOUR_WRITER}
,我这里是从Oracle
到Oracle
,进入到datax->bin
目录中执行如下脚本:
最终会生成如下模版,
我们根据自己的情况,修改即可。接下来,就是在Spring Boot
中调用DataX
来同步数据了。首先引入Jar
由于DataX
相关的包在Maven
仓库中不存在,那么只有上传到个人仓库或者直接引用本地包,我选择了后者,这几个包在编译好的datax
目录中可以找到。接下来,我们编写调用代码:
我来看一下运行效果:
可以看到1335288
条数据,60
秒便同步完成。相较之前的Kettle
,同步速度提升了8-10倍,而且,可以按不同组织进行同步,每个组织的数据最多也就十多万,通过DataX
同步也就十几秒,业务也能够接受这个速度。为什么非要把Kettle
换为DataX
,这就是我自身原因,不知如何对Kettle
进行调优来提升同步速度,有经验的朋友还请告知。
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容