介绍
数据准实时复制(CDC,Change Data Capture)是一种数据复制技术,它专注于捕捉数据的变化(例如插入、更新、删除等操作),并将这些变化传播到另一个或多个系统中,使得目标系统能够及时地反映源系统中的最新状态。CDC 技术主要用于:
- 数据库之间的信息同步:通常用于MySQL与Redis,ES之间的数据一致性问题
- TODO
CDC 的实现方式有很多种,常见的方法包括:
- 日志捕获:监听数据库的日志文件(如 MySQL 的 Binlog,Oracle 的 Redo Log)来捕获数据变更。
- TODO
CDC产品
Canal
Canal 是一个由阿里巴巴开源的 MySQL 数据库的 CDC 工具,主要用于将 MySQL 的变更数据同步到其他系统中,通过订阅binlog日志,来监听数据库的变化。然后将数据投放到MQ或ES,Redis等组件中,Canal本质上是把自己伪装成Mysql的从库,从而获取Master的binlog日志。
Mysql主备模式
- Master数据库通过将数据变化写入binlog日志
- Slave数据库通过监听bin log日志的变化将其写入自己的relay log日志
- 然后Slave数据库通过重做relay log日志来实现数据同步
bin log 日志
Mysql的bin log日志,会记录所有的的DDL和DML语句。(数据操作,数据库操作)
statement,语句级别 记录每一次执行的语句,可能造成数据不一致now()
row,记录每一行的变化,占用空间大
mixed,上两种模式的混合 根据执行的语句的不同选择不同的存储方式,解析难度高
场景
- 数据库的同步
- 数据库的实时监控。
- 数据分析和挖掘
- 数据库的备份。
- 数据的聚合。
- 数据库的迁移。
开启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等,可以将解析出来的数据发送到不同的消息队列中,以便进行进一步的处理和分析。
优缺点
高性能,支持分布式,可靠性好,支持多种数据输出方式,支持数据过滤与转化,适配器丰富。使用难度大,对数据库日志产生一定的影响,无法获得历史数据
应用场景
主要用于数据同步与数据备份,数据实时性分析,增量数据抽取,数据迁移等数据处理任务