数据库系列——基于Canal实现MySQL增量数据同步

环境准备:

1、redis (默认端口6379)

2、zookeeper (默认端口2181)

3、Kafka (默认端口9092)

4、Canal (默认端口 11111)

5、MySQL (默认端口 3306

本文Github代码地址https://github.com/cheriduk/spring-boot-integration-template

Canal介绍:引用官方介绍


canal 是阿里巴巴 MySQL 数据库 Binlog 的增量订阅&消费组件。

名称:canal [kə'næl]
译意: 水道/管道/沟渠
语言: 纯java开发
定位: 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL

早期,阿里巴巴 B2B 公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于 trigger 的方式获取增量 变更,不过从 2010 年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开 启了一段新纪元。ps. 目前内部使用的同步,已经支持 MySQL 8.x 和 Oracle 部分版本的日志解析

基于日志增量订阅&消费支持的业务:

  1. 数据库镜像

  2. 数据库实时备份

  3. 多级索引 (卖家和买家各自分库索引)

  4. search build (elastic search)

  5. 业务cache刷新(redis)

  6. 价格变化等重要业务消息

Canal 工作原理:

原理相对比较简单:

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

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

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

以上为官方介绍

 

canal 链接: https://pan.baidu.com/s/1HIT4b30BtXrkHym-w4peww 提取码: ar6c


 实现项目开发中如何使用呢?

实际项目我们是配置MQ模式,配合RocketMQ或者Kafka,canal会把数据发送到MQ的topic中,然后通过消息队列的消费者进行消费处理

这篇文章演示部署Canal,配合使用Kafka,同步数据到Redis

通过架构图,我们很清晰就知道要用到的组件:MySQL、Canal、Kafka、ZooKeeper、Redis

MySQL搭建大家应该都会,ZooKeeper、Redis这些网上也有很多资料参考

主要说下Kafka搭建

首先在官网下载安装包:
 

解压,打开/config/server.properties配置文件,修改日志目录

首先启动ZooKeeper,我用的是3.4.13版本:

 
接着再启动Kafka,在Kafka的bin目录下打开cmd,输入命令:

kafka-server-start.bat ../../config/se

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值