目录

  • 第一部分:DataX
    • 一、DataX基本知识
    • 二、DataX应用
    • 三、DataX安装测试
    • 四、DataX性能调优
    • 五、DataX源码编译问题整理
    • 六、datax增量同步
  • 第二部分:增量同步
    • 一、数据库增量同步数据思路
    • 二、数据同步工具 Otter
      • 1. Canal
      • 2. Otter能解决什么问题
    • 三、Otter与Datax区别
    • 四、SymmetricDS
    • 五、Otter和SymmetricDS
  • 参考

第一部分:DataX

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台。

一、DataX基本知识

Alibaba DataX调研使用
https://blog.csdn.net/aWDac/article/details/80822233
[推荐]DataX实战应用
https://blog.csdn.net/u010429286/article/details/82356121
DataX使用指南
参考URL: https://yq.aliyun.com/articles/71063

DataX是由Alibaba开源的一款异构数据同步工具,可以在常见的各种数据源之间进行同步,并仅依赖Java环境,具有轻量、插件式、方便等优点,可以快速完成同步任务。一般公司的数据同步任务,基本可以满足。

DataX是一个高可用的数据同步工具,稳定性强,速度快,上手快。

参考DataX的官方说明
User Guide
https://github.com/alibaba/DataX/blob/master/userGuid.md
DataX-Introduction
https://github.com/alibaba/DataX/blob/master/introduction.md
插件开发宝典
https://github.com/alibaba/DataX/blob/master/dataxPluginDev.md

运行原理介绍:

  1. DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
  2. DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
  3. 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发(可在json配置文件中配置)运行完毕分配好的所有Task,默认单个任务组的并发数量为5。
  4. 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。
  5. DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出。

工作流程大概就是用Reader模块从源数据库读数据,在Storage模块里将Reader模块读到的数据交换给Write模块,Write模块将数据写进目的数据库。

DoubleQueue
设立两块空间,一个存储源数据,一个存储目标数据。在开始,空间A和空间B都是空的,loading 任务从源数据库向A空间加载数据,A空间满后再向B空间加载数据,同时dumping任务将A空间数据转储到目的数据库。A空间清空后,交换AB两者的任务,即A空间的任务换成loading,B空间的任务换成dumping。不断重复上述操作。

二、DataX应用

[推荐]DataX实战应用
https://blog.csdn.net/u010429286/article/details/82356121
基于datax的数据同步平台
参考URL: http://www.cnblogs.com/huangxiaoxue/p/9392817.html
ETL工具–DataX3.0实战
参考URL: http://blog.51cto.com/daisywei/1903085

DataX插件分为Reader和Writer两类。Reader负责从数据源端读取数据到Storage(交换空间),Writer负责将Storage中的数据写入到数据目的端。Storage可以适配不同种类的Reader和Writer,从而实现数据同步.

目前DataX版本已经提供的Reader插件如下:
1、 hdfsreader : 支持从hdfs文件系统获取数据。
2、mysqlreader: 支持从mysql数据库获取数据。
3、 sqlserverreader: 支持从sqlserver数据库获取数据。
4、 oraclereader : 支持从oracle数据库获取数据。
5、 streamreader: 支持从stream流获取数据(常用于测试)
6、httpreader : 支持从http URL获取数据。

提供的Writer插件如下:

1、 hdfswriter :支持向hdbf写入数据。
2、 mysqlwriter :支持向mysql写入数据。
3、 sqlserverwriter:支持向sqlserver写入数据。
4、 oraclewriter :支持向oracle写入数据。
5、 streamwriter :支持向stream流写入数据。(常用于测试)

DataX 3.0每一种读插件都有一种或多种切分策略,都能将作业合理切分成多个Task并行执行,单机多线程执行模型可以让DataX速度随并发成线性增长。 在源端和目的端性能都足够的情况下,单个作业一定可以打满网卡。

更多实际应用结合DataX Transformer在数据同步、传输过程中,存在用户对于数据传输进行特殊定制化的需求场景,包括裁剪列、转换列等工作,可以借助ETL的T过程实现(Transformer)。DataX包含了完成的E(Extract)、T(Transformer)、L(Load)支持。

三、DataX安装测试

tar zxvf datax.tar.gz
chmod -R 755 dataxcd datax/bin
#会给你返回json模板格式
python datax.py -r mysqlreader -w mysqlwriter
#python datax.py ../job/job.json

其中,job.json是自带的一个例子配置文件,没什么具体用途。

四、DataX性能调优

DataX使用指南——ODPS to ODPS
参考URL: https://yq.aliyun.com/articles/71063

DataX调优要分成几个部分,任务机指运行Datax任务所在的机器。

  • 网络本身的带宽等硬件因素造成的影响;
  • DataX本身的参数;
  • 从源端到任务机;
  • 从任务机到目的端;
    即当觉得DataX传输速度慢时,需要从上述四个方面着手开始排查。

五、DataX源码编译问题整理

DataX源码打包编译采坑记
参考URL: https://blog.csdn.net/qq_32447301/article/details/82909326

编译根pom报错整理

  1. 报错Could not resolve dependencies for project com.alibaba.datax:odpsreader:jar:0.0.1-SNAPSHOT
    这个依赖应该是阿里内部jar,外部仓库无法加载这个jar
    搜索关键字 com.aliyun.odps
    pom替换为
    如下:换一下版本 :0.20.7-public
     <dependency><groupId>com.aliyun.odps</groupId><artifactId>odps-sdk-core</artifactId><version>0.20.7-public</version></dependency>

注意这里使用odps-sdk-core关键字搜到2个pom: reader、writer都需要改。

  1. 报错Could not find artifact com.aliyun.openservices:tablestore-streamclient:jar:1.0.0-SNAPSHOT
    修改pom 关键字tablestore-streamclient
    此处把1.0.0-SNAPSHOT改成1.0.0
        <dependency><groupId>com.aliyun.openservices</groupId><artifactId>tablestore-streamclient</artifactId><version>1.0.0</version></dependency>

六、datax增量同步

参考URL: https://www.codercto.com/a/45069.html

Datax需要解决的另一个难题在于增量更新。

首先需要说明, Datax本身在大部分reader插件中提供了where配置项,用于做增量更新。例如mysqlerader md文件说明如下:

* **where*** 描述:筛选条件,MysqlReader根据指定的column、table、where条件拼接SQL,并根据这个SQL进行数据抽取。在实际业务场景中,往往会选择当天的数据进行同步,可以将where条件指定为gmt_create > $bizdate 。注意:不可以将where条件指定为limit 10,limit不是SQL的合法where子句。<br />where条件可以有效地进行业务增量同步。如果不填写where语句,包括不提供where的key或者value,DataX均视作同步全量数据。* 必选:否 <br />* 默认值:无 <br />* **querySql*** 描述:在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略table,column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id <br />`当用户配置querySql时,MysqlReader直接忽略table、column、where条件的配置`,querySql优先级大于table、column、where选项。* 必选:否 <br />* 默认值:无 <br />

有一些场景,where配置满足不了,使用querySql配置:
如在数据清洗过程中,我们通常需要去join一些维度表以便过滤脏数据。所以,我们更多时候会使用querySql配置项:
不过由于每次数据同步的增量条件是不同的,可以通过自己编写代码来动态修改job任务,以便达到增量更新。

第二部分:增量同步

一、数据库增量同步数据思路

[推荐]浅谈增量数据的四种抽取模式
参考URL: https://blog.csdn.net/mochou111/article/details/80995156
什么是数据抽取 --全量抽取、增量抽取
参考URL: https://blog.csdn.net/yangtongli2012/article/details/51725408

  • 基于全量对比得出增量数据
    增量数据即DML操作,无非I(INSERT),D(DELETE),U(UPDATE)三种,故可以拿昨天的全量数据与今天的全量数据进行对比得出昨天的增量,具体方法是通过关联表的主键,唯一键用left join,right join,inner join 等对比出增量数据
    优点:因为是云上merge对比,所以对源库无影响
    缺点:这个操作仅仅适合表有主键,唯一键或者数据量较小的表,不然海量数据中每条数据的每一列都进行逐一比对,很显然这种频繁的I/O操作以及复杂的比对运算会造成很大的性能开销。

  • 基于日志文件读取增量数据
    这种方式可以通过读取数据库的归档日志等得到增量数据,然后在目标库或者文档服务器里进行操作
    优点:可以做到数据无误差传输,有回滚机制,有容灾备份的能力
    缺点:开归档会对源端数据库的磁盘造成压力,增加储存成

  • 基于建触发器生成增量数据
    触发器的概念我们都知道,故我们可以建立IDU三种操作的触发器,并由触发器将变更的数据写到库里的临时表里,然后用ETL工具直接抽取这张临时表即可进行增量上云
    优点:是数据库本身的触发器机制,契合度高,可靠性高,不会存在有增量数据未被捕获到的现象
    缺点:对于源端有较大的影响,需要建立触发器机制,增加运维人员,还要建立临时表,储存临时表,增加储存成本和运维成本

  • 基于时间字段切分增量数据
    此方法依据表的某一时间字段,在etl工具里进行条件设定即可快速抽取增量数据
    优点:数据处理逻辑清楚,速度较快,成本低廉,流程简单
    缺点:此方法要求表的时间字段必须是随表变动而变动的不为空数据,此外由于是直接读取表数据,该方法无法获取删除类型的数据。

总结:

  1. 对于大型数据库,数据变更频率快,表数量多,对数据传输要求有备份,安全,零差数据的采用基于数据库日志的方法
  2. 对于小型数据库,且未开归档,但数据变更频率快的采用基于全量对比的方法
  3. 对于含有标准时间戳字段,且应用环境适合,表数量较少的采用基于时间字段的方法
  4. 至于触发器,由于需要源端运维成本较大,且对源端存储有压力(既然都是对存储有压力为何不用OGG),故很少有客户选择这一种

二、数据同步工具 Otter

数据同步工具otter(二)
参考URL: https://blog.csdn.net/frog4/article/details/81613025
数据同步工具otter(一)谈谈binlog和canal
参考URL: https://blog.csdn.net/frog4/article/details/80280149

基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统;

Otter基于数据库增量日志解析,支持mysql/oracle数据库进行

otter是一个基于canal的数据同步平台,含义是水獭,主要的功能就是可以将mysql的数据同步至另外mysql或者oracle,在项目中应用场景主要是多数据中心、BI系统抽取数据、灾备。

另外也支持双向同步(即A库同步给B库,B库也同步给A库)、文件同步,
在canel的基础上做了一个mysql的同步平台(带WEB管理界面),在界面上,你可以定义相应的映射规则,otter进程就会根据你定义的规则读取binlog,并更新到目标库中去。

github的地址:https://github.com/alibaba/otter

1. Canal

原理如下:

  1. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
  2. mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  3. canal解析binary log对象(原始为byte流)

2. Otter能解决什么问题

  • 异构库同步
    Otter支持从Mysql同步到Mysql/oracle,我们可以把mysql同步到oracle

  • 单机房同步
    可以作为一主多从同步方案,对于单机房内网来说效率非常高,还可以做为数据库版本升级,数据表迁移,二级索引等这类功能

  • 异地机房同步
    异地机房同步可以说是Otter最大的亮点之一,可以解决国际化问题把数据从国内同步到国外来提供用户使用,在国内场景可以做到数据多机房容灾

  • 双向同步
    双向同步是在数据同步中最难搞的一种场景,Otter可以很好的应对这种场景,Otter有避免回环算法和数据一致性算法两种特性,保证双A机房模式下,数据保证最终一致性

  • 文件同步
    站点镜像,进行数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片

三、Otter与Datax区别

定位不同,datax主要是解决离线全量同步,通过select语句或者dump指令提取数据,然后同步到目标,数据仓库典型用法。

DataX不适合实时数据同步或太频繁的定时同步,因为同步都需要去读取源表,频率过大对源表会造成压力。

canal&otter,主要是解决准实时同步,通过解析数据库日志,然后同步到目标,网站前台的典型用法。

四、SymmetricDS

SymmetricDS是一个文件和数据库同步软件,开源的,支持多主复制,同步时过滤和在异构的网络环境中进行数据转换传输。它支持单向和双向上的多个订阅者,异步的数据复制。

SymmetricDS,利用数据库的触发器捕捉数据库变化来实现数据库同步,可以有两个节点或多个节点,可实现同服务器不同数据库同步或不同服务器数据库同步。

五、Otter和SymmetricDS

两者功能是差不多。

网上的一些描述如下:
otter的第三个版本是基于SymmetricDS 2.x版本发展出来,正是因为有了这层关系,两者才有一些相似。

这次开源的为otter的第四个版本,从2011年开始开发,和SymmetricDS几个不同点:

  1. 数据capture方式:otter4目前支持log-based,otter3和SymmetricDS一样,是基于trigger.
  2. 双向同步冲突处理:otter4目前已经有比较成熟的方案, 而从SymmetricDS 3.x的文档中看,还处于planing中
  3. 调度模型:otter4相比于SymmetricDS,在数据传输的模型上,引入了并行化调度,提升同步tps. 而在SymmetricDS 3.x文档中暂没看到相关的描述,基本还是串行的处理,只不过多了push的功能,这点是otter4没有的

基于log-based的方案,对于数据库的影响相对较少,同时可精确提取具体变更的字段,做到按需同步,而SymmetricDS基于trigger的方式,只能提取到变更的pk,每次同步时基于pk反查源库提取到行记录。从性能上来说,按字段同步传输量和数据库载入上都有很大的优势,从数据冲突上来说,冲突粒度更小了,有利于冲突处理方案的执行。

可以说下,otter3和otter4的性能对比,基本上是一个数量级上的提升,otter3的基于trigger,然后根据pk反查的,处理tps基本只在5001000tps,而基于log-based,基于字段同步的可以达到500010000tps.

SymmetricDS有一个比较大的优势就是支持的数据库的比较多,这也是基于log-based所无法超越的,因为完成一个log-based不是那么简单的,代价很高,也就是最近1,2年才陆续有mysql的log-based出现,而oracle的log-based基本上的价格就是一个oracle的价格。

参考

Otter与你们的Datax有多大区别?
参考URL: https://www.iteye.com/topic/1131759?page=2

DataX以及增量同步相关推荐

  1. dataX 增量同步参考

    FlinkCDC+Hudi+Hive大数据实时入湖基础实战_阿飞不会飞丶的博客-CSDN博客 flink cdc 整合 数据湖hudi 同步 hive - 简书 DataX 实现增量同步pg数据库_野 ...

  2. 使用 DataX 实现数据同步(高效的同步工具)

    DataX 使用介绍 前言 一.DataX 简介 1.DataX3.0 框架设计 2.DataX3.0 核心架构 二.使用 DataX 实现数据同步 1.Linux 上安装 DataX 软件 2.Da ...

  3. datax 持续数据同步_采用DataX实现多表增量数据同步

    这两天验证了一下阿里的DataX数据同步工具,觉得DataX可以用来做管理数据的多级数据同步.DataX用来做批量数据迁移很适合,能够保证数据的一致性,性能也很好,结合时间戳字段,用来实现数据定时增量 ...

  4. datax——全量、增量同步

    一.全量同步 本文以mysql -> mysql为示例: 本次测试的表为mysql的系统库-sakila中的actor表,由于不支持目的端自动建表,此处预先建立目的表: CREATE TABLE ...

  5. datax实现mysql增量同步_datax 3.0配合crontab实现数据定时增量同步

    使用datax 实现数据增量同步踩坑记录 前提概要 由于项目上需要将a服务器数据同步至b服务器,一开始使用mysql主从复制,但是由于主从同步无法触发位于b服务器的触发器,只能放弃此方案.后来找到了d ...

  6. ETL异构数据源Datax_自增ID增量同步_12

    文章目录 增量同步方法 1.先同步存量数据 2.再同步增量数据(根据自增ID.日期条件) 前提条件: 1.只针对数据增长,如果老数据被update/delete则无法使用增量同步方式. 基于主键自增I ...

  7. datax 持续数据同步_DataX数据同步

    因为选择了ElasticSearch做全文检索,需要把数据从数据库同步到es,此处选择开源方案DataX作为数据同步工具. 官方文档很详细,可以直接参考. DataXDataX 是一个异构数据源离线同 ...

  8. mysql条件增量同步命令_DataX3 Mysql增量同步ES

    1.下载DataX 2.修改pom.xml wiriter部分我保留了 mysqlwriter txtfilewriter streamwriter elasticsearchwriter 3.mav ...

  9. 基于dataX的数据同步平台搭建

    前言 基于Java和DataX工具实现数据同步的后台管理,包括数据同步任务的生成,任务的管理,查看任务的执行日志,解析任务的执行结果等功能. 内含一些技术实现方案.心得体会和填坑经验等干货. 阅读本文 ...

最新文章

  1. html浏览器影响js问题,js 浏览器兼容性问题
  2. Linux last命令后面的时间
  3. x86上的Java最终字段没有操作?
  4. Shiro介绍及主要流程
  5. php-fpm的平滑启动
  6. 解析markdown_利用 markdown 生成页面实践
  7. mysql slave修改_MySql主从复制(初学笔记)
  8. Hadoop系列之OutputCollector
  9. 【报告分享】迈向万亿市场的直播电商-毕马威+阿里研究院.pdf(附下载链接)...
  10. plt.subplot()和plt.subplots(),plt.gca(),
  11. VB6中给数组赋值的限制
  12. CNN已老,GNN来了:重磅论文讲述深度学习的因果推理(附资源)
  13. [转] 病毒、木马进程查询手册
  14. ceph客户端使用_Ceph 基础篇 认证
  15. QQ音乐下载器、爬虫
  16. android手机锁屏密码忘记,安卓手机锁屏密码忘了怎么办 解决锁屏密码六种方法介绍...
  17. 计算机报 论文,计算机学院毕业设计(论文)题目上报.doc
  18. 普通文档怎么换成php,腾讯在线文档如何转化为普通文档
  19. 网站隐藏跳转代码php,域名跳转代码[可隐藏与不隐藏域名转向代码(自动跳转代码) ]...
  20. Python绘制用于学术论文投稿的黑白图片

热门文章

  1. 2021最新编程语言排行榜
  2. java计算两个日期之间的月份差
  3. Java中size>>1意思
  4. colaboratory报错:CUDA status Error: file: ./src/blas_kernels.cu : ()
  5. SpringBoot踩坑记录--Invalid bound statement (not found): com.zxq.crud.dao.UserDao.selectAllByDepart
  6. 原生JS利用HTML5 CANVAS画布布局点状连线图
  7. 利用pstsdk进行解析pst文件
  8. 我的Outlook PST数据文件在哪里,以及如何将它们移动到其他地方?
  9. 在使用Repeater、DataList 或 DataGrid 的模板列表时,根据不同状态,显示不同颜色
  10. Altium如何导入DXF/DWG文件