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

优缺点

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

应用场景

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

相关推荐
IT_陈寒36 分钟前
垃圾回收器选错了,我的Java服务内存炸了
前端·人工智能·后端
用户8356290780511 小时前
使用 Python 在 PDF 中创建与管理书签
后端·python
Nturmoils1 小时前
字段太多看不全,ksql 的展开模式和输出控制怎么用
数据库·后端
大志说编程1 小时前
Agent面试真题06: 十分钟带你快速掌握Agent记忆管理高频面试题(附详细答案)
后端·面试·ai编程
ServBay2 小时前
Claude Code 被曝植入后门,AI 时代如何安全打造本地 DevOps
后端·ai编程·claude
王二端茶倒水2 小时前
从千兆到万兆:宽带运营不能只卖套餐,要管用户生命周期从千兆到万兆:宽带运营需要管理用户生命周期
后端·网络协议·架构
网易云信3 小时前
重磅认证!网易智企智能融合通信获鸿蒙生态权威认可,斩获「Harmony Trusted SDK」认证
人工智能·后端·aigc
神奇小汤圆3 小时前
我把祖传Java项目重构后,接口响应从3s砍到了200ms,只改了这几行代码
后端
神奇小汤圆3 小时前
面试官:你们项目里的线程池是怎么用的?怎么管理的?
后端