基于现在接触的ETL工具(datax和kettle)的对比总结

现阶段需要做数据库同步工作,目前调研了两个工具datax和kettle

目前虽然环境使用的是kettle+jenkins调度平台方案,但是多多少少会有一些不太令人满意的地方,但应该算是满足大部分需求了,先暂时这样实现

这两者各有优缺点,基本的就不总结了。现在说说一些关键点:

基本方面:

1.datax适合做数据同步工作;kettle适合数据清洗,转换工作

目前成型的可视化界面,datax推荐datax web,kettle后期维护用的界面推荐jenkins/kettle-manager简单

2.datax对于数据库压力比较小,全量读取速度优于kettle

3.对于一些方案的可行性,小数据量的选择全量对比,10w数据量大概3s完成插入更新全量抽取过程,还是比较快的。小数据量的情况下差别不大

4.目前生产可行方案可以选择datax+datax web/kettle

5.具体一些方案https://blog.csdn.net/inthat/article/details/84146346(虽然是datax的,但是kettle也适用)

6.日志方案是对于大量数据的最优选择,mysql用maxwell抓取日志或者上边提供的方案,oracle用ogg,sqlserver目前不清楚需要再找

7.保证kettle后期稳定的情况下用windows自带的定时任务或者Linux中用crontab,不过后续的jenkins完全能胜任

8.部署kettle到服务器上有可能提示少包的问题(具体部署步骤https://www.jianshu.com/p/fa398f104e5d   或者   https://www.cnblogs.com/yangp/p/11410137.html)

贴上链接:wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/matthewdva:/build:/EPEL:/el7/RHEL_7/x86_64/webkitgtk-2.4.9-1.el7.x86_64.rpm

yum install webkitgtk-2.4.9-1.el7.x86_64.rpm

或者后续的包可以对应下载http://rpmfind.net/linux/rpm2html/search.php?query=libwebkitgtk-1.0.so.0%28%29%2864bit%29&submit=Search+...&system=&arch=

9.docker部署mysql

https://blog.csdn.net/weixin_40693633/article/details/84074459

10.部署jenkins

 https://blog.csdn.net/qq_35868412/article/details/89475386(这里比较详细)

进行配置文件配置,

在 etc/sysconfig/jenkins里 改端口

 https://blog.csdn.net/u013232219/article/details/104370953

#修改jenkins镜像文件

cd ~/.jenkins/updates

 sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

一些小坑:mysql 8.0驱动jar包方面更换,导致不能用,需要注意驱动

#所有命令找不到
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

#刷新环境变量:

source /etc/profile

#给脚本赋予权限:

chmod +x ./data-integration/*.sh

datax用的python版本要注意,2.6+版本和3.0+版本有语法差别(记得是括号问题)

centos 7可以通过添加打印机方式避免开机总是黑屏

部署kettle和jenkins会存在一些坑

#书写sh脚本时候

 在脚本里面添加

source /etc/profile即可

11.关于调度平台问题,目前如果想要放入docker容器里面然后再放入集群中有难度,使用某个服务上xxl-job调度,carte.sh方法还得提供个ip地址,或者xml文件,目前没想到怎么实现,目前可能方法可能是用docker库里的kettle镜像,自己生成一个,或者自己通过源码

生成一个docker file文件,打包完成后再进行部署

12.目前8.0版本和8.2版本有差异,生成的镜像文件再运行job文件可能存在问题,而docker库里面的8.3版本可以运行8.2版本

13.如果是从接口获取数据的方式,并且接口调用频率有限制

 可以通过这种方式(中间加个等待时间)然后获取的也是系统时间和时间戳存放的时间中间数据量,这样可以变化的获取页数和对应的所有数据,针对接口返回404情况,可以获取唯一标识存放到临时表里,然后再遍历这个唯一标识去做二次请求,这样

如果实时更细数据量不多的情况下,其实可以用先从临时表里获取对应的404对应的唯一标识,然后先看看原数据里面有没有,如果没有的话则会进入插入更新,虽然这个组件很慢,但是对于已经在前边进行排除了,只是进行更新对比,所以实质上数据量并不大
进行全量比对方式也是可行的(目前方法只是针对目前做的东西,通用的其实还是日志的效果好,但是难度大一些,需要再研究)

重点是这几个转换方案太蠢了,步骤过多影响速度,还好现在用时间戳,并行所有job只用37-45s左右,但是数据量一大就有问题了不适合做现在或者以后的最佳方案,所以只做思路参考

14.其实清洗最优方案还是通过python去处理,或者使用data-web的方式,那个是在git上有源码,并且结合的正好是xxl-job调度平台,可以使用这个调度平台+整合数据的方案

 15.自动获取字典项:https://www.cnblogs.com/majinju/p/5002626.html

16.关于部署到阿里云服务器的上的问题,一定一定要添加    安全组,不然会报错,并且CONVERT_TO_NULL是可以使用。 并且有两个方向,一个入一个出

2021.1.30更新

17.今天重新部署生产环境,发现有防火墙问题需要更改

https://www.cnblogs.com/ming369/p/10403397.html

/var/lib/jenkins路径下的 hudson.model.UpdateCenter.xml文件更改成

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirror.xmission.com/jenkins/updates/update-center.json</url>
  </site>
</sites>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值