canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。 canal 就是一个同步增量数据的一个工具。
canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费
早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
基于日志增量订阅和消费的业务包括
来自阿里巴巴官方介绍
Insert
) 的数据写入到kafkasparkStreaming
读取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主备复制原理
canal 工作原理
WAL:
WAL
日志中,之后再将数据写入memstore
,此举是为了在regionSerever进程异常退出重启后,恢复数据,这种机制就叫WAL
。
WAL日志
:将其称为写操作命令的备份edits
文件中,在namenode
重启的时候,将之前的fsimage
文件和edits
合并得到最新的元素据。
edtis
:客户端写操作命名的备份biglog
日志记录功能,开启后每次向mysql
服务端发送写操作命令,会记录在一种特殊的文件中,这个特殊的文件九称为biglog
日志。
biglog
日志:客户端写操作命名的备份,其目的也是为了服务器异常退出,恢复数据!从机(slave)是如何同步主机(master)数据的呢?他会启动两个线程(I/O thread、SQL thread),
binary log
新增的内容。并将内容写入到中继日志(relay log)
中,用于临时缓冲的作用。中继日志(relay log)
的中数据,并执行,这样从机(slave)
就有了和主机(master)
一样的操作了。canal 就像是一名"间谍",它伪装成了一个
从机(slave)
,从主机(master)
中骗取数据。拿到数据之后,再对数据进行解析,比如·只要新增的数据或者删除或修改的数据,并将数据重新进行包装,将数据重新写入到第三方服务中(mysql、Kafka、es等)。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。