异构数据源同步之数据同步 → datax 再改造,开始触及源码
开心一刻
其实追女生,没那么复杂
只要你花心思,花时间,陪她聊天,带她吃好吃的,耍好玩的,买好看的
慢慢你就会发现什么叫做 打水漂
不说了,我要去陪她看电影了

前情回顾
主要讲到了2点
- 去
Python,直接在命令行用java命令来启动- 通过
java代码拉起DataX进程来启动
虽说很简单,但也涉及一些细节,推荐你们去看看
说是改造 DataX ,其实算不上,顶多算是在新手村蹦跶,对 DataX 来说无关痛痒

我们总不能一直待在新手村吧,觉醒姐 都说了
女性现在是已经清醒觉醒,独立的在走向成长的道路上
希望广大男同胞,能够自信起来,睁眼看世界
然后要好好的努力,不要破防了之后就骂骂咧咧、哭哭啼啼的
我就断章取义下,就是说猿友们要好好努力,走出新手村,去改造 DataX 源码!
基础准备
既然是改源码,那么我们肯定得先获取源码,对不对?
不然我们改个毛呀
如何获取源码,我再教你们一遍
找到
DataX官网源码下载

下载方式有很多,概括为 2 种
- git clone
- 源码压缩包
推荐用
git clone,存在版本管理,修改错了能够回滚,对我们改造源码好处多多
但是,没梯子的化,有堵墙会阻碍我们下载源码
此时不要慌,我们可以从 Gitee 下载
下载方式与上面讲的一致,不再赘述
下载下来后,你们会发现 plugin 模块太多

这么长,就问你们怕不怕?
我反正挺害怕的,根本不想改,要不算了,散了吧

等等,先别散,还有得救,不就是 plugin 太多吗
那就都删了,只留一对不就好了
这里不推荐真的直接去删,因为要删的太多了
我们可以将必要的复制出来,进行简化,就像这样

因为模块名调整了,所以每个模块的 pom.xml 需要微调下,而不能完全复制
至于 pom.xml 怎么个微调法,我相信你们都懂得
assembly 也需要微调,你们别漏了
其他的,例如 src、doc ,完全复制即可
qsl-datax-debug 就是 DataX 中的模块 datax-example

只是我做了一个合并处理,作用是一样的
qsl-datax 源码地址
执行 com.qsl.executor.DebugTest#mysql2Mysql ,结果如下

出现上图,说明我们的简化抽取是没有问题的
至此,基础准备算是完成了,是不是很简单?

后续的操作都是基于 qsl-datax ,请尽情的开始你们的改造吧
修复组件安全漏洞
不知道你们公司是怎么看待组件安全漏洞的,反正我司是非常重视的
就我个人而言,我是比较反感组件安全漏洞修复的
因为升级组件版本是有前提的,不是说升到安全版本就升到安全版本的
必须保证业务功能不受影响,如何保证了?
这可不是小孩子过家家,来不了一点虚的,必须将组件涉及到的业务功能都测一遍,就问你慌不慌?
有时候某个小组件的升级, 不亚于一次系统的改造
反正我是经历过血的教训的
不到万不得已,千万不要去手贱

有点扯远了,我们继续看组件安全漏洞修复
虽说我对安全漏洞可以忍,但是代码 标黄警告 我是真的不能忍

反手就是一个 Ignore,眼不见心不烦!

但是非常不推荐这样做,指标不治本,躲得过初一躲不过十五,还是推荐升级到安全版本
尤其是项目初期,反正要进行全业务功能测试的,所以随便升
根据提示,升级到安全版本还是非常容易的,但是组件升级了还不算完
爽完了你得给钱,不然交易不算完成,是有隐患的!
不好意思,说漏嘴了,组件升级了一定要进行业务流程验证
程序还能不能跑起来,业务流程是否正常,等等
我就不一一演示每个组件的升级了,我全量改了之后提交,你们直接去看源码
最后要给你们打个预防针
当下安全的版本在未来不一定安全,所以组件安全漏洞修复是一项长期的工作!!!

core.json 配置化
面对此命题,你们是不是有疑问
core.json 在 conf 目录下已经存在了
难道这不算配置化?
这肯定算配置化,但是我觉得不够灵活
假设针对不同的 job,我们需要配置不同的 core.json,你们想如何应对
你们肯定会说
每启动一个 job,就修改一次 core.json,so easy
可行是可行,但你们不觉得有很大的局限吗
面对一个两个 job,可以这样手动去改
但如果是十个八个,甚至上百个 job 了,你们又该如何应对
所以,我说的配置化是指
core.json 作为 Datax 的启动参数之一
如果没有指定,则用默认的 conf 目录下的 core.json
如果参数指定,则用指定的 core.json
需求是不是清楚了
但是问题又来了,该怎么改了?
但凡看过我上篇文章
你们都应该知道从哪里切入
找 DataX 的启动类嘛

然后再找到它的 main 方法

是不是没得选了,只能进 entry 方法了

很幸运,我们已经找到我们想要的了;分两点说明下
获取
DataX参数java -server -Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -Ddatax.home=/datax -classpath /datax/lib/* com.alibaba.datax.core.Engine -mode standalone -jobid -1 -job job.json
哪些是 jvm 参数,哪些是 DataX 参数,你们能区分出来吗
解析
job配置core.json 的解析包含在 job.json 解析中
很明显这两处我们都得改
新增
core参数
照葫芦画瓢嘛,应该没问题吧
core.json解析调整
ConfigParser.parseJobConfig(jobPath)跟进去后有个细节
这里仅仅只是用到了
core.json中的一个配置值所以我们可以将这个参数值作为
getJobContent方法的参数
上游调用的地方也要记得改

core.json 配置化就改完了,此处是不是应该有点什么?

集成 DataX
如果只是偶尔的数据同步,那么手动操作 DataX 就够了,又不是不能用

但是如果是定时同步,并且有非常多的同步,你们还手动操作吗
所有要加个模块
https://gitee.com/youzhibing/qsl-datax/tree/master/qsl-datax-hook
由这个模块去拉起 DataX 进程的同时去对接调度平台
调度平台有很多,例如
XXL-JOB、DolphinSchedulerElastic-Job等等
qsl-datax-hook 目前只实现了 DataX 进程的拉起

至于调度平台的对接,需要你们去对接(楼主又不知道你们用的哪个调度平台!)
接下来做什么?
是不是调试 qsl-datax-hook 与 DataX 的对接
打包我们改造的
DataX
不出意外的话,在
qsl-datax/target/datax/datax/目录下出现了我们熟悉的目录结构
所以请大声的告诉我,
DataX的home 目录是什么?G:\qsl-datax\target\datax\datax
执行
com.qsl.hook.DataXManagerTest#exec这个代码就比较简单了,相信你们都能看懂

顺利的话,同步成功日志如下

至此,集成算是基本完成
但是我还要补充一点,就是日志问题
DataX 有自己的日志

而 qsl-datax-hook 的日志正好包含了 DataX 的日志,所以呢?
是不是重复了,是不是可以取消一个?
因为后续主要是跟 qsl-datax-hook 打交道,所以推荐做法是
保留 DataX 的日志控制台输出,但不写入文件
qsl-datax-hook 既要控制台输出,还要写入文件
DataX日志调整
qsl-data-hook日志调整
具体怎么保留日志,是否需要都保留,你们根据自己项目的实际情况进行调整
切勿生搬硬套!!!
总结
组件安全漏洞修复,虽说不情愿,但还是要修滴
关于对
DataX的改造,除非必要,不推荐大家去改如果对 DataX 掌握的不够,很容易改出问题
能不动就不要动,改好没绩效,改出问题要背锅,吃力不讨好,又不是不能跑
DataX+datax-web基本满足大部分需求,直接拿来用,不推荐重复造轮子
异构数据源同步之数据同步 → datax 再改造,开始触及源码的更多相关文章
- SQLite与MySQL、SQLServer等异构数据库之间的数据同步
SQLite DBSync是开源嵌入式数据库SQLite的数据同步引擎,实现了SQLite与SQLite数据库之间以及SQLite与异构数据库(Oracle.MySQL.SQLServer)之间的增量 ...
- 鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据 | 百篇博客分析OpenHarmony源码 | v33.02
百篇博客系列篇.本篇为: v33.xx 鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁 ...
- Navicat premium对数据库的结构同步和数据同步功能
一.在目标数据库新建一个相同的数据库名. 二.工具-->结构同步. 三.填写源数据库和目标数据库. 四.点击比对 五.点击部署 六.点击运行 七.点击关闭.此时源数据库的结构已经同步到目标数据库 ...
- dubbo同步调用、异步调用和是否返回结果源码分析和实例
0. dubbo同步调用.异步调用和是否返回结果配置 (1)dubbo默认为同步调用,并且有返回结果. (2)dubbo异步调用配置,设置 async="true",异步调用可以提 ...
- BAT推荐免费下载JAVA转型大数据开发全链路教程(视频+源码)价值19880元
如今随着环境的改变,物联网.AI.大数据.人工智能等,是未来的大趋势,而大数据是这些基石,万物互联,机器学习都是大数据应用场景! 为什么要学习大数据?我们JAVA到底要不要转型大数据? 好比问一个程序 ...
- Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)
大家好!我是小富- 这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号.密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小. 说起这 ...
- PHP批量替换MySql数据库中的数据内容(替换MySql数据库内容源码)
PHP批量替换MySql数据库内容 UTF-8 1.0版 <?php //声明 //1.本源码开发意图:作者在使用一些CMS建站的时候发现很多CMS把网址写入到数据库了,如果换网址,那么就需要更 ...
- 关于js渲染网页时爬取数据的思路和全过程(附源码)
于js渲染网页时爬取数据的思路 首先可以先去用requests库访问url来测试一下能不能拿到数据,如果能拿到那么就是一个普通的网页,如果出现403类的错误代码可以在requests.get()方法里 ...
- MQTT再学习 -- MQTT 客户端源码分析
MQTT 源码分析,搜索了一下发现网络上讲的很少,多是逍遥子的那几篇. 参看:逍遥子_mosquitto源码分析系列 参看:MQTT libmosquitto源码分析 参看:Mosquitto学习笔记 ...
- jquery省市区三级联动(数据来源国家统计局官网)内附源码下载
很久很久没有写博了. 今天更新了项目的省市区三级联动数据,更新后最新的海南三沙都有,分享给所有需要的小伙伴们... JQUERY + JSON,无数据库,纯JS代码,无加密,无压缩,可直接使用在任何项 ...
随机推荐
- JS启动Windows上的exe
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HarmonyOS语言基础类库开发指南上线啦!
语言基础类库提供哪些功能?多线程并发如何实现?TaskPool(任务池)和Worker在实现和使用场景上有何不同? 针对开发者关注的并发等语言基础类库的相关能力,我们在新推出的语言基础类库开发指南 ...
- LTV预估的一些思考
什么是LTV 用户生命周期价值(Lifetime Value, LTV)是一个非常重要的指标,定义为单个用户在某种生命周期内(i.e. 从开始使用产品到停止使用期间) 为产品创造的总价值. 比如GMV ...
- 中国大陆地区维护的Linux操作系统
Linux开源生态丰富,中国大陆地区基于CentOS停服,依托阿里云.腾讯云.华为云三大私营企业,相继发布了自己的开源Linux定制版,很高兴的是他们只是改个名字并没有选择闭门造车,只是官网还是很不耻 ...
- Flink 助力美团数仓增量生产
简介: 本文由美团研究员.实时计算负责人鞠大升分享,主要介绍 Flink 助力美团数仓增量生产的应用实践.内容包括:1.数仓增量生产:2.流式数据集成:3.流式数据处理:4.流式 OLAP 应用:5. ...
- 有赞 Flink 实时任务资源优化探索与实践
简介: 目前有赞实时计算平台对于 Flink 任务资源优化探索已经走出第一步. 随着 Flink K8s 化以及实时集群迁移完成,有赞越来越多的 Flink 实时任务运行在 K8s 集群上,Flink ...
- 解密 Dubbo 三大中心的部署架构
简介:Dubbo作为一个微服务框架,Dubbo SDK与应用服务绑定在同一个进程内,它跟随着应用服务被部署在分布式集群各个位置,为了在分布式环境下实现各个应用服务间的协作, Dubbo 定义了一些中 ...
- SmartNews:基于 Flink 加速 Hive 日表生产的实践
简介: 将 Flink 无缝地集成到以 Airflow 和 Hive 为主的批处理系统的技术挑战和应对方案. 本文介绍了 SmartNews 利用 Flink 加速 Hive 日表的生产,将 Flin ...
- [FAQ] 如何从 svg 字符串创建 SVGElement
HTML 部分: <div style="display: none" id="svgCon"></div> JS 部分: cons ...
- [GF] 与 Laravel 设计相近的 Golang 框架 GoFrame
在 GoFrame (gogf/gf) 框架中有明确的代码分层设计,分别是 api, service, dao, model. model (结构模型)一般由工具自动生成,用于定义数据结构,只可被 m ...

