当前位置:网站首页>Canal 介绍
Canal 介绍
2022-07-26 22:39:00 【用户1483438】
canal 作用
canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。 canal 就是一个同步增量数据的一个工具。
canal 背景
canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费
早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
基于日志增量订阅和消费的业务包括
- 数据库镜像
- 数据库实时备份
- 索引构建和实时维护(拆分异构索引、倒排索引等)
- 业务 cache 刷新
- 带业务逻辑的增量数据处理 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x
来自阿里巴巴官方介绍
canal 应用场景
- 将用户的订单信息传入后台。
- 后台服务器将订单信息保存到mysql数据库。
- 又 canal 进行监控mysql中的写操作变化,将发生修改(
Insert) 的数据写入到kafka - 通过
sparkStreaming读取Kafka中的数据,进行计算。 - 将计算好的结果,重新写如到服务器中,并返回到浏览器。
需求
根据需求,思考如何处理?
获取用户的订单信息,保存入库,并且进行实时计算(A 商品成交单数,B商品成交单数...)。
为什么要使用canal?
通过需求了解到需要对订单信息做计算,并且实时统计出每个商品的成交信息,如此时A 商品 100条,B 商品 20条。这商品信息是动态变化的,用户每提交一次,后台就应该计算出最新的商品订单记录。所以需要实时进行累加,比如又来一批商品,其中 A商品 10条,B 商品5条,C 商品10条。那么展示的结果就是 A110条,B 30条。C5条。但是计算又不可能重头开始计算,也就是说,A+B+C =145 中条数据中,再重新分A,B,C各个商品的信息。而是应该做累加 比如上一次A商品100条再加上这次A商品的10条。这样的效率才更高。
canal的作用
了解上面的原因之后,我们再来聊聊
canal发挥的作用,它可以实现增量同步,还是拿A商品举例,第一批数据中,A商品有100条,canal便会将这批新增的数据写入Kafka,再交给spark处理。第二次又新增一批数据,于是canal又将监控到新增数据写入到Kafka中。依次类推,最终由spark计算出结果返回出去。
canal 除了写入kafka 还能将数据写入到其他中间件(mysql、elasticsearch、hbase等)
工作原理官网介绍
MySQL主备复制原理
- MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
- MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
- MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
canal 工作原理
- canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump 协议
- MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
- canal 解析 binary log 对象(原始为 byte 流)
BinaryLog
WAL:
- hbase在做写操作时,先将写操作的命令记录在
WAL日志中,之后再将数据写入memstore,此举是为了在regionSerever进程异常退出重启后,恢复数据,这种机制就叫WAL。WAL日志:将其称为写操作命令的备份 - NameNode在运行期间,会将客户端实时产生的元数据记录在
edits文件中,在namenode重启的时候,将之前的fsimage文件和edits合并得到最新的元素据。edtis:客户端写操作命名的备份 - mysql可以开启
biglog日志记录功能,开启后每次向mysql服务端发送写操作命令,会记录在一种特殊的文件中,这个特殊的文件九称为biglog日志。biglog日志:客户端写操作命名的备份,其目的也是为了服务器异常退出,恢复数据!
RelayLog
从机(slave)是如何同步主机(master)数据的呢?他会启动两个线程(I/O thread、SQL thread),
- I/O thread:复制读取主机(master)写入到
binary log新增的内容。并将内容写入到中继日志(relay log)中,用于临时缓冲的作用。 - SQL thread:用于读取
中继日志(relay log)的中数据,并执行,这样从机(slave)就有了和主机(master)一样的操作了。
canal 工作原理(我个人的理解)
canal 就像是一名"间谍",它伪装成了一个
从机(slave),从主机(master)中骗取数据。拿到数据之后,再对数据进行解析,比如·只要新增的数据或者删除或修改的数据,并将数据重新进行包装,将数据重新写入到第三方服务中(mysql、Kafka、es等)。
边栏推荐
- [3. VIM operation]
- Detailed explanation of CSRF forged user request attack
- [b01lers2020]Welcome to Earth
- Elaborate on the differences and usage of call, apply and bind 20211031
- A simple prime number program. Beginners hope that older bosses can have a look
- 3_ Jupiter notebook, numpy and mattlotlib
- Inherit, inherit, inherit
- Dynamic binding, static binding, and polymorphism
- [qt] meta object system
- DOM day_04(7.12)BOM、打开新页面(延迟打开)、地址栏操作、浏览器信息读取、历史操作
猜你喜欢
随机推荐
Export and import in ES6
[SQL注入] 报错注入
【3. Vim 操作】
2022.7.10DAY602
[CISCN2019 华东南赛区]Double Secret
A simple prime number program. Beginners hope that older bosses can have a look
【4.1 质数及线性筛】
【3. 基础搜索与图论初识】
[interview: concurrent Article 16: multithreading: detailed explanation of wait/notify] principle and wrong usage (false wake-up, etc.)
[acwing game 61]
2020-12-22 maximum common factor
2020-12-20 99 multiplication table
C language to find prime numbers, leap years and minimum common multiples and maximum common divisors
【Codeforces Round #808 (Div 2.) A·B·C】
JSCORE day_ 04(7.5)
[BJDCTF2020]EzPHP
【4.9 容斥原理详解】
2022.DAY600
el-checkbox中的checked勾选状态问题 2021-08-02
Ah ah ah ah ah a

![[HITCON 2017]SSRFme](/img/ed/4b396e5685bfe025eb96e34a8bd6a3.png)
![[b01lers2020]Welcome to Earth](/img/e7/c8c0427b95022fbdf7bf2128c469c0.png)
![[ciscn2019 finals Day2 web1]easyweb](/img/36/1ca4b6cae4e0dda0916b511d4bcd9f.png)



![[By Pass] WAF 的绕过方式](/img/dd/7204b2401a9f18c02c8b9897258905.png)

