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

优缺点

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

应用场景

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

相关推荐
Rverdoser5 分钟前
RabbitMQ的基本概念和入门
开发语言·后端·ruby
Tech Synapse1 小时前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
.生产的驴1 小时前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构
微信-since811921 小时前
[ruby on rails] 安装docker
后端·docker·ruby on rails
代码吐槽菌3 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm
豌豆花下猫3 小时前
Python 潮流周刊#78:async/await 是糟糕的设计(摘要)
后端·python·ai
YMWM_3 小时前
第一章 Go语言简介
开发语言·后端·golang
码蜂窝编程官方3 小时前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
hummhumm4 小时前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
J老熊4 小时前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程