canal实现写mysql客户端_MySQL协议和canal实现

前言

前面的文章里,我们了解到 canal 可以从 MySQL 中感知数据的变化。这是因为它模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,从而实现了主从复制。

正是了解到这一点,笔者有两个问题便一直萦绕于心:

它是如何模拟 MySQL slave 交互协议的?

它又是怎么解析 binlog 日志的呢?

今天,笔者准备就着这两个问题,扒拉扒拉 canal 的代码,一探究竟。

一、MySQL 主从复制

在谈 canal 之前,我们有必要再重温下 MySQL 主从复制的原理。

fc734c03634c

image

总结上图的流程如下:

MySQL master 将数据变更写入二进制日志 (binary log , 其中记录叫做二进制日志事件binary log events);

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

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

二、canal 原理

fc734c03634c

image

上图就很形象的描述了 canal 的角色。它的原理也很简单:

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

mysql master收到dump请求,开始推送binary log给slave(也就是canal);

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

canal将解析后的对象,根据业务场景,分发到比如 MySQL 、RocketMQ 或者 ES 中。

三、源码启动

看完了 MySQL 主从复制和 canal 原理之后,为了方便 debug &#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值