您的位置 首页 golang

Canal 分布式异步数据同步实战

1.canal介绍

canal [kə’næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。

基于日志增量订阅和消费的业务包括

数据库镜像

数据库实时备份

索引构建和实时维护(拆分异构索引、倒排索引等)

业务 cache 刷新

带业务逻辑的增量数据处理

当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

工作原理

MySQL主备复制原理

MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)

MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)

MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

canal 工作原理

canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议

MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )

canal 解析 binary log 对象(原始为 byte 流)

canal组成:

admin 控制台

deployer 服务端 dump 读取 binlog

client 客户端 解析 binlog 写 客户端 (es hbase 等 )

语言支持:

canal java 客户端: ClientExample · alibaba/canal Wiki · GitHub

canal c# 客户端: GitHub – dotnetcore/CanalSharp: Alibaba mysql database binlog subscription & consumer components Canal’s .NET client.

canal go客户端: GitHub – withlin/canal-go: Alibaba mysql database binlog incremental subscription & consumer components Canal’s golang client[阿里巴巴mysql数据库binlog的增量订阅&消费组件 Canal 的 go 客户端 ]

canal php客户端:

canal Python客户端:

canal Rust客户端:

版本:1.1.5X

2.应用场景

分布式场景mysql与 es、hbase、redis 等分治后的聚合 不建议做应用同步双写,一致性、可用性都很棘手

我们的订单分治后做es聚合搜索,采用canal做异步同步,并未给业务带来任何延迟的感觉,可以说延迟还是比较低的,也不用考虑事务仍然保持良好的一致性

3.高可用\性能优化及实战

文字太苍白,直接 上图:

4.监控報警

canal集成 prometheus监控

文章来源:智云一二三科技

文章标题:Canal 分布式异步数据同步实战

文章地址:https://www.zhihuclub.com/98405.shtml

关于作者: 智云科技

热门文章

网站地图