canal基础

介绍

数据准实时复制(CDC,Change Data Capture)是一种数据复制技术,它专注于捕捉数据的变化(例如插入、更新、删除等操作),并将这些变化传播到另一个或多个系统中,使得目标系统能够及时地反映源系统中的最新状态。CDC 技术主要用于:

  1. 数据库之间的信息同步:通常用于MySQL与Redis,ES之间的数据一致性问题
  2. TODO

CDC 的实现方式有很多种,常见的方法包括:

  1. 日志捕获:监听数据库的日志文件(如 MySQL 的 Binlog,Oracle 的 Redo Log)来捕获数据变更。
  2. TODO

CDC产品

Canal

Canal 是一个由阿里巴巴开源的 MySQL 数据库的 CDC 工具,主要用于将 MySQL 的变更数据同步到其他系统中,通过订阅binlog日志,来监听数据库的变化。然后将数据投放到MQ或ES,Redis等组件中,Canal本质上是把自己伪装成Mysql的从库,从而获取Master的binlog日志

Mysql主备模式

  1. Master数据库通过将数据变化写入binlog日志
  2. Slave数据库通过监听bin log日志的变化将其写入自己的relay log日志
  3. 然后Slave数据库通过重做relay log日志来实现数据同步

bin log 日志

Mysql的bin log日志,会记录所有的的DDL和DML语句。(数据操作,数据库操作)

statement,语句级别 记录每一次执行的语句,可能造成数据不一致now()

row,记录每一行的变化,占用空间大

mixed,上两种模式的混合 根据执行的语句的不同选择不同的存储方式,解析难度高

场景

  1. 数据库的同步
  2. 数据库的实时监控。
  3. 数据分析和挖掘
  4. 数据库的备份。
  5. 数据的聚合。
  6. 数据库的迁移。

开启binlog

ini 复制代码
[mysqld]  
log-bin=mysql-bin #添加这一行就ok  
binlog-format=ROW #选择row模式  
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复  
sql 复制代码
show variables like 'binlog_format';
show variable like 'log_bin'
sql 复制代码
CREATE USER canal IDENTIFIED BY 'canal';    
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';  
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;  
FLUSH PRIVILEGES; 

配置

bash 复制代码
canal.port=             # 监听端口
canal.serverMode=       # 推送到那种消息队列
canal.destinations=     # 所监控的数据库实例配置
实例配置 复制代码
canal.instance.mysql.slaveId = # 从库ID
canal.instance.master.address = # 从库ID
canal.instance.dbusername = # 从库ID
canal.instance.dbpassword = # 从库ID

Message Entry

message是canal从日志中一次抓取的信息,一个meaasge可以包含多个sql执行结果, 一个结果是一个entry,一个entry就是一个SQL执行后的数据改动

spring boot + canal

常见面试题

Canal是什么,有哪些特性

Canal是阿里巴巴开源的一款基于Netty实现的分布式、高性能、可靠的消息队列,在实时数据同步和数据分发场景下有着广泛的应用。Canal具有以下特性: 支持MySQL、Oracle等数据库的日志解析和订阅;支持多种数据输出方式,如Kafka、RocketMQ、ActiveMQ等;支持支持数据过滤和格式转换;拥有低延迟和高可靠性等优秀的性能指标

Canal的工作原理

Canal主要通过解析数据库的binlog日志来获取到数据库的增、删、改操作,然后将这些变更事件发送给下游的消费者。Canal核心组件包括Client和Server两部分,Cient负责连接数据库 ,并启动日志解析工作,将解析出来的数据发送给Server; Server 则负责接收Cient发送的数据,并进行数据过滤和分发Canal还支持多种数据输出器,如Kafka、RocketMQ、ActiveMQ等,可以将解析出来的数据发送到不同的消息队列中,以便进行进一步的处理和分析。

优缺点

高性能,支持分布式,可靠性好,支持多种数据输出方式,支持数据过滤与转化,适配器丰富。使用难度大,对数据库日志产生一定的影响,无法获得历史数据

应用场景

主要用于数据同步与数据备份,数据实时性分析,增量数据抽取,数据迁移等数据处理任务

相关推荐
妙蛙种子31112 分钟前
【Java设计模式 | 创建者模式】 原型模式
java·开发语言·后端·设计模式·原型模式
阿聪谈架构20 分钟前
第07章(下):LangGraph 工作流进阶 —— 检查点、人工介入与多 Agent 协作
人工智能·后端
希望永不加班24 分钟前
SpringBoot 配置绑定:@ConfigurationProperties
java·spring boot·后端·spring
悟空码字26 分钟前
MySQL性能优化的天花板:10条你必须掌握的顶级SQL分析技巧
java·后端·mysql
Soofjan29 分钟前
Go interface 源码:iface、itab、getitab 与动态派发
后端
Soofjan32 分钟前
Go interface:语法、接口值与常见坑
后端
写Cpp的小黑黑33 分钟前
WebSocket 协议、帧结构与 MTU 详解
后端
white-persist38 分钟前
【vulhub spring CVE-2018-1270】CVE-2018-1270 Spring Messaging 远程命令执行漏洞 完整复现详细分析解释
java·服务器·网络·数据库·后端·python·spring
神奇小汤圆1 小时前
Spring-Boot-泛型封装-这8个坑让我调了3天
后端
深挖派1 小时前
GoLand 2026.1 安装配置与环境搭建 (保姆级图文教程)
后端·golang·编辑器·go·goland