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 小时前
1.1 go环境搭建及基本使用
开发语言·后端·golang
尚学教辅学习资料1 小时前
基于SpringBoot的美食分享平台+LW示例参考
spring boot·后端·美食
Vitalia4 小时前
从零开始学 Rust:基本概念——变量、数据类型、函数、控制流
开发语言·后端·rust
猎人everest6 小时前
SpringBoot应用开发入门
java·spring boot·后端
孤雪心殇12 小时前
简单易懂,解析Go语言中的Map
开发语言·数据结构·后端·golang·go
小突突突13 小时前
模拟实现Java中的计时器
java·开发语言·后端·java-ee
web1376560764314 小时前
Scala的宝藏库:探索常用的第三方库及其应用
开发语言·后端·scala
闲猫14 小时前
go 反射 interface{} 判断类型 获取值 设置值 指针才可以设置值
开发语言·后端·golang·反射
LUCIAZZZ15 小时前
EasyExcel快速入门
java·数据库·后端·mysql·spring·spring cloud·easyexcel
Asthenia041215 小时前
依托IOC容器提供的Bean生命周期,我们能在Bean中做些什么?又能测些什么?
后端