canal反向同步数仓方案

canal

Canal是阿里巴巴开源的一款主要用于数据库同步业务的项目,基于数据库的日志解析,获取增量变更进行同步,由此衍生出了Canal增量订阅&消费的实时数据库同步。目前阿里内部版本已经支持mysql和oracle部分版本的日志解析,当前的canal开源版本支持mysql 5.7及以下的版本。

基本原理

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

工作原理

canal反向同步数仓方案_第1张图片
工作原理

原理相对比较简单

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

Canal安装配置

wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.deployer-1.1.3.tar.gz

  1. 解压
tar xzf canal.deployer-1.1.3.tar.gz
  1. 配置
cd /service/canal/conf
vim canal.properties  //全局canal服务配置
canal.id= 41  //每个canal server实例的唯一标识
canal.zkServers=192.168.200.44 //zookeeper地址,不设置默认单节点模式,设置的话通过zookeeper维护热备切换
#canal.instance.global.spring.xml = classpath:spring/file-instance.xml //通过文件维护偏移量
canal.instance.global.spring.xml = classpath:spring/default-instance.xml  //利用zookeepr维护偏移量信息

vim example/instance.properties   //每个instance一个单独配置
canal.instance.master.address=192.168.200.30:3306 //数据库IP端口
canal.instance.master.journal.name=mysql-bin.000030 //从哪个binlog文件开始dump
canal.instance.master.position=107 //binlog文件偏移量
canal.instance.master.timestamp= 1557454483242  //ms
canal.instance.dbUsername=root //数据库用户名
canal.instance.dbPassword=123456 //数据库密码
canal.instance.connectionCharset mysql= UTF-8  //数据解析编码
canal.instance.filter.regex= canal.test1
//
mysql 数据解析关注的表,Perl正则表达式.多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 
常见例子:
1. 所有表:.* or .*\\..*
2. canal schema下所有表: canal\\..*
3. canal下的以canal打头的表:canal\\.canal.*
4. canal schema下的一张表:canal.test1
5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
  1. copy整个canal目录到另一个节点服务器(单节点不用)
  2. 修改canal.properties中的canal.id=42(单节点不用)
  3. 启动canal
/service/canal/bin/startup.sh

Mysql配置修改

vim /etc/my.cnf
binlog_format=row

同步数据到dataworks数仓

未完待续...

你可能感兴趣的:(canal反向同步数仓方案)