本小结介绍下数仓数据同步常用的开源组件,具体组件如下
datax :离线数据同步工具,由阿里开源。github地址
kettle:离线ETL工具,由Pentaho公司开源。中文站点。下载地址
canal:实时binlog订阅工具,由阿里开源。github地址
先介绍datax组件,它基于python语言开发,支持十几种数据库之间的数据同步,有nosql、关系数据库、时序数据库、无结构数据存储等类型。它通过一个用户可配置的json文件,定义一个同步任务。例子如下:
{
"job": {
"setting": {
"speed": {
"channel": 3
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "root",
"column": [
"id",
"name"
],
"splitPk": "db_id",
"connection": [
{
"table": [
"table"
],
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/database"
]
}
]
}
},
"writer": {
"name": "streamwriter",
"parameter": {
"print":true
}
}
}
]
}
}
datax的同步速度号称可以打满服务器带宽,实际使用一般受限于来源库或者目标库的读写性能。同时它支持多线程并行运行,前提是reader组件支持按照主键进行数据分片。它还支持执行一个在同步前和同步后的执行sql功能,这个功能可以让你在同步数据前清空目标库表,同步完成后向日志表中写入数据。
总的来说datax是一个优秀的表级别的数据同步工具,缺点是没有可视化界面。而且每张表都需要开发一个json文件,整库同步需要做很多开发。
第二个组件kettle,是数据ETL工具,这里介绍它是因为它也可以实现数据同步。kettle的数据同步性能较之datax有一定差距,数据来源也支持十几种,但是kettle的开源资料比较少,初始学习可能比较困难。
下图是一个数据同步任务时用到的两个kettle组件,如图所示kettle工具是可视化的并且支持拖拽。
第三个组件介绍的是canal,它属于CDC组件。原理是伪装自己为mysql的从节点向主节点发送订阅请求,并且拿到binlog日志数据发送到kafka或者同步到其它数据库中。
canal组件产出的数据是一个实时流,我们可以将一个应用数据库的日志数据发送到kakfa中,下游各个消费者订阅数据将增量数据同步到各自的数据库中,官网提供的客户端有如下
canal也存在局限性,首先它不支持数据初始化即只能同步增量日志不能同步库表已有的数据。同时它只支持订阅mysql的日志。
总结:本小结讲了两个离线同步组件一个实时数据订阅组件,它们有各自的优点与缺点,你需要根据自己的需求进行选择使用。
本小结涉及的组件我在网盘上传了一份,有需要的可以直接下载。
链接:https://pan.baidu.com/s/19eE8Q1dwAVirTlfjzTm4_g
提取码:ubci