现阶段需要做数据库同步工作,目前调研了两个工具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>