单节点canal的介绍和搭建(对接mysql和rocketMQ)

一、简介

​ 通过数据源的事务日志抓取数据源变更,这能解决一致性问题(只要下游能保证变更应用到新库上)。它的问题在于各种数据源的变更抓取没有统一的协议,如,MySQL用binlog,MongoDB用oplog。

1、Canal

​ 纯java开发,蛀牙用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费,目前canal只能支持row模式的增量订阅(statement只有sql,没有数据,所以无法获取原始的变更日志)

1、工作原理

在这里插入图片描述

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

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

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

2、MySQL主从复制实现

在这里插入图片描述

从上图可知,复制可分为三步:

  1. master将改变记录到二进制日志(binary log)中(这些记录叫二进制日志时间,binary log events,可以通过show binlog events进行查看);
  2. salve将master的binary log events拷贝到它的中继日志(relay log);
  3. salve重做中继日志的时间,将改变反映它自己的数据;

3、canal架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

通过deployer模块,启动一个canal-server,一个canal-server内部包含多个instance,每个instance都会伪装成一个Mysql实例的salve.client与server之间的通信协议有protocol模块定义。client订阅binlog信息时,需要传递一个destination参数,server会根据这个destination确定由那一个instance尾气提供服务。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

说明:

  • server代表一个canal运行实例,对应一个jvm

  • instance对应一个数据队列(1个server对应1…n个instance)

instance模块:

  • eventParser(数据接入,模拟salve协议和master进行交互,协议解析)
  • eventSink(Parser和Store链接器,进行数据过滤,加工和分发的工作)
  • eventStore(数据存储,目前只存在内存里)
  • metaManager(增量订阅&消费信息管理器)

canal假装成MySQL Salve步骤:

  1. 与MySQL Mater服务器建立Socket链接;
  2. 根据MySQL协议规范发送身份认证数据包进行身份认证;
  3. 根据MySQL协议规范发送salve注册数据包将自己伪装成MySQL Salve;
  4. 根据MySQL协议规范发送Dump请求,让Master给自己推送Binglog日志;

4、binarylog

一个binlog包含一个四字节的模数和一系列描述数据变更的Event,没一个Event又包含header和data两部分,大致结构如下:

在这里插入图片描述

基于Row的binlog主要包括以下几个Event:

TABLE_MAP_EVENT:描述变更的数据库表

WRITE_ROWS_EVENT:描述插入数据变更

UPDATE_ROWS_EVENT:描述修改数据变更

DELETE_ROWS_EVENT:描述删除数据变更

1、新增binlog
{"data":[{"BRAND_ID":"39103535-2d93-425b-a85e-c9709abf4c15","BRAND_NAME":"体验配方","BRAND_CODE":"5464365","BRAND_FLAG":"0","STATE":"0","CREATE_DATE":"2021-12-03","REMARK":"!","TS":"2021-12-03 12:04:13","CORP_ID":"50c43444-004c-44b9-a2d3-25c91a8b04c3"}],"database":"visdb_20210729","es":1638504356000,"id":43,"isDdl":false,"mysqlType":{"BRAND_ID":"varchar(36)","BRAND_NAME":"varchar(36)","BRAND_CODE":"varchar(36)","BRAND_FLAG":"int(2)","STATE":"int(2)","CREATE_DATE":"char(10)","REMARK":"varchar(200)","TS":"char(19)","CORP_ID":"varchar(36)"},"old":null,"pkNames":["BRAND_ID"],"sql":"","sqlType":{"BRAND_ID":12,"BRAND_NAME":12,"BRAND_CODE":12,"BRAND_FLAG":4,"STATE":4,"CREATE_DATE":1,"REMARK":12,"TS":1,"CORP_ID":12},"table":"bdp_brand","ts":1638504272407,"type":"INSERT"}
2、更新binglog
{"data":[{"BRAND_ID":"39103535-2d93-425b-a85e-c9709abf4c15","BRAND_NAME":"体验配方","BRAND_CODE":"5464365","BRAND_FLAG":"0","STATE":"0","CREATE_DATE":"2021-12-03","REMARK":"!!","TS":"2021-12-03 12:06:25","CORP_ID":"50c43444-004c-44b9-a2d3-25c91a8b04c3"}],"database":"visdb_20210729","es":1638504488000,"id":44,"isDdl":false,"mysqlType":{"BRAND_ID":"varchar(36)","BRAND_NAME":"varchar(36)","BRAND_CODE":"varchar(36)","BRAND_FLAG":"int(2)","STATE
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以回答这个问题。canal中间件可以实现redis和mysql的数据同步,它可以监控mysql数据库的binlog日志,将数据变更同步到redis中。同时,canal也支持将mysql数据同步到其他数据库,如elasticsearch等。 ### 回答2: Canal中间件是一种用于实现数据库数据同步的工具。它可以实现Redis和MySQL之间的数据同步。 首先,我们需要设置Canal中间件与Redis和MySQL的连接。通过配置Canal中间件的连接参数,使其能够连接到Redis和MySQL数据库。可以设置监控的表和字段,以确定需要同步的数据范围。 当MySQL数据库中的数据发生变化时,Canal中间件会自动捕获这些变化并生成相应的Binlog日志。通过监听MySQL数据库的Binlog日志,Canal中间件能够实时获取更新的数据。 接下来,Canal中间件将获取到的数据进行处理,将变化的数据转换成Redis可以接受的数据格式,并将其写入到Redis数据库中。这样就实现了MySQL中数据变化的同步到Redis数据库的功能。 通过Canal中间件,我们可以实现MySQL和Redis之间的双向数据同步。当MySQL中的数据发生改变时,Canal中间件会将变化的数据同步到Redis数据库中。同样地,当Redis中的数据发生改变时,Canal中间件也能够捕获这些变化并同步到MySQL数据库中。 这种数据同步的方式可以提高应用程序的性能和可靠性。通过将热点数据存储到Redis中,可以提高读取性能。同时,由于Canal中间件的实时同步机制,可以保证数据的一致性。 总结起来,Canal中间件可以实现Redis和MySQL之间的数据同步。它通过捕获MySQL数据库的Binlog日志,并将变化的数据转换成Redis可以接受的格式,实现了数据的同步。这种方式可以提高应用程序的性能和可靠性。 ### 回答3: Canal中间件是一个开源的数据同步工具,用于将数据库中的数据同步到其他数据源。在实现Redis和MySQL数据同步的场景下,可以通过以下步骤实现数据的同步: 第一步,安装配置Canal中间件。首先需要在服务器上安装Canal中间件,并配置Canal的相关参数,如数据源的地址、端口号、用户名和密码等。 第二步,配置Canal中间件连接MySQL数据库。需要在Canal配置文件中添加MySQL数据源的相关信息,包括MySQL服务器的地址、端口号、用户名和密码等。 第三步,配置Canal中间件连接Redis数据库。同样需要在Canal配置文件中添加Redis数据源的相关信息,包括Redis服务器的地址、端口号、密码等。 第四步,创建数据库表数据的监听和同步。通过创建Canal的实例,并指定需要监听的数据库和表,可以实现对特定表数据的监听和同步。 第五步,通过Canal中间件将MySQL数据同步到Redis。当MySQL数据库中的数据发生变化时,Canal中间件会将变更的数据解析并转发给Redis数据库,实现数据的同步。 通过以上步骤,即可实现Redis和MySQL数据的同步。Canal中间件作为数据同步的桥梁,能够实时监听MySQL数据库的变化,并将变更的数据同步到Redis,确保数据的一致性和及时性。 需要注意的是,在配置Canal中间件时,需要确保CanalMySQL、Redis之间的网络连接正常,并且对应的用户有足够的权限来进行数据操作。同时,还需要进行相关的性能测试和优化,以确保数据同步的效率和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值