基于Docker结合Canal实现MySQL实时增量数据传输功能

2019-10-24 21:01 来源:易采站长站 作者:刘景俊 点击: 评论:

A-A+

原标题:基于Docker结合Canal实现MySQL实时增量数据传输功能

Canal的介绍

Canal的历史由来

在早期的时候,阿里巴巴公司因为杭州和美国两个地方的机房都部署了数据库实例,但因为跨机房同步数据的业务需求 ,便孕育而生出了Canal,主要是基于trigger(触发器)的方式获取增量变更。从2010年开始,阿里巴巴公司开始逐步尝试数据库日志解析,获取增量变更的数据进行同步,由此衍生出了增量订阅和消费业务。

当前的Canal支持的数据源端MySQL版本包括:5.1.x 、5.5.x 、5.6.x、5.7.x、8.0.x。

Canal的应用场景

目前普遍基于日志增量订阅和消费的业务,主要包括:

    基于数据库增量日志解析,提供增量数据订阅和消费 数据库镜像 数据库实时备份 索引构建和实时维护(拆分异构索引、倒排索引等) 业务Cache刷新 带业务逻辑的增量数据处理 Canal的工作原理

在介绍Canal的原理之前,我们先来了解下MySQL主从复制的原理。

MySQL主从复制原理

MySQL Master将数据变更的操作写入二进制日志binary log中, 其中记录的内容叫做二进制日志事件binary log events,可以通过show binlog events命令进行查看 MySQL Slave会将Master的binary log中的binary log events拷贝到它的中继日志relay log MySQL Slave重读并执行relay log中的事件,将数据变更映射到它自己的数据库表中

了解了MySQL的工作原理,我们可以大致猜想到Canal应该也是采用类似的逻辑去实现增量数据订阅的功能,那么接下来我们看看实际上Canal的工作原理是怎样的?

Canal工作原理

Canal模拟MySQL Slave的交互协议,伪装自己为MySQL Slave,向MySQL Master发送dump协议 MySQL Master收到dump请求,开始推送binary log给Slave(也就是Canal) Canal解析binary log对象(数据为byte流)

基于这样的原理与方式,便可以完成数据库增量日志的获取解析,提供增量数据订阅和消费,实现MySQL实时增量数据传输的功能。

既然Canal是这样的一个框架,又是纯Java语言编写而成,那么我们接下来就开始学习怎么使用它并把它用到我们的实际工作中。

Canal的Docker环境准备

因为目前容器化技术的火热,本文通过使用Docker来快速搭建开发环境,而传统方式的环境搭建,在我们学会了Docker容器环境搭建后,也能自行依葫芦画瓢搭建成功。由于本篇主要讲解Canal,所以关于Docker的内容不会涉及太多,主要会介绍Docker的基本概念和命令使用。 如果你想和更多容器技术专家交流,可以加我微信liyingjiese,备注『加群』。群里每周都有全球各大公司的最佳实践以及行业最新动态 。

【易采站长站编辑:秋军】