云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

阿里开源数据同步神器Canal,数据同步再也不发愁了

jxf315 2024-12-06 15:57:55 教程文章 42 ℃

最近赶上项目上线,需要部署预发布环境,把生产环境数据同步到预发布环境。生产环境数据有将近百万级,需要去写代码同步的话压力也不小,然后群里小伙伴给我推荐了Canal,他们已经在业务系统里面使用了,性能杠杠的。废话不多少,分享一下我的使用经过。

介绍

Canal是java实现的开源项目,主要用于Mysql数据库增量日志分析以及数据订阅和消费。对原有的业务逻辑是无侵入的。Canal通过模拟slave模式,监听binlog日志获取数据,binglog需要设置成row,能够监听新增,修改,删除数据。

支持的MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x。

mysql主从复制原理:1、master将操作日志下入binlog 2、slave将binlog日志写入自己的relay_log 3、slave把relay_log中的日志写入自己的数据。

Canal分为client和server端。服务端负责解析MySQL的binlog日志,传递增量数据给客户端或者消息中间件。客户端负责解析服务端传过来的数据,然后定制自己的业务处理。


Docker安装

Dockerfile文件:https://github.com/alibaba/canal/blob/master/docker/Dockerfile

docker 安装预计占用900M左右空间。

#拉取最新镜像
docker pull canal/canal-server:latest

# 下载脚本
wget https://raw.githubusercontent.com/alibaba/canal/master/docker/run.sh 

# 构建一个destination name为test的队列
sh run.sh -e canal.auto.scan=false \
		  -e canal.destinations=test \
		  -e canal.instance.master.address=127.0.0.1:3306  \
		  -e canal.instance.dbUsername=canal  \
		  -e canal.instance.dbPassword=canal  \
		  -e canal.instance.connectionCharset=UTF-8 \
		  -e canal.instance.tsdb.enable=true \
		  -e canal.instance.gtidon=false  \

出现successful就是server启动成功,然后可以启动client进行binlog订阅了。

多语言

Canal 的server 模式使用protobuf 3.的交互协议,所以 client 端可采用不同语言实现不同的消费订阅。

比如java、c#、python、go、php、rust、nodejs

其他

Canal还提供了Canal Admin Guide,能够进行整体配置管理、节点运维等功能,方便小伙伴们操作。


以上都是对Canal的一些简单尝试,Canal还有更多的功能这里就不多做介绍了,感兴趣的小伙伴们可以去github上查看文档操作。

github地址:https://github.com/alibaba/canal


今天就介绍到这里了,小伙伴们有任何问题欢迎随时留言讨论![作揖]

最近发表
标签列表