現階段需要做數據庫同步工作,目前調研了兩個工具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>
后續繼續補充