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等,可以将解析出来的数据发送到不同的消息队列中,以便进行进一步的处理和分析。

优缺点

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

应用场景

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

相关推荐
舒一笑1 小时前
为什么where=Version就是乐观锁了?
后端·mysql·程序员
GoGeekBaird1 小时前
关于垂类AI应用落地行业的方法论思考
后端·github·agent
小宁爱Python1 小时前
Django 基础入门:命令、结构与核心配置全解析
后端·python·django
你的人类朋友2 小时前
认识一下Bcrypt哈希算法
后端·安全·程序员
tangweiguo030519872 小时前
基于 Django 与 Bootstrap 构建的现代化设备管理平台
后端·django·bootstrap
IT果果日记2 小时前
详解DataX开发达梦数据库插件
大数据·数据库·后端
dazhong20122 小时前
Spring Boot 项目新增 Module 完整指南
java·spring boot·后端
bobz9653 小时前
Cilium + Kubevirt 与 Kube-OVN + Kubevirt 在公有云场景下的对比与选择
后端
David爱编程4 小时前
深度解析:synchronized 性能演进史,从 JDK1.6 到 JDK17
java·后端
脑子慢且灵4 小时前
【JavaWeb】一个简单的Web浏览服务程序
java·前端·后端·servlet·tomcat·web·javaee