canal

官网:https://github.com/alibaba/canal

 

什么是canal

  阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务。

  canal是用java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,canal主要支持了MySQL的binlog解析,解析完成后才利用canal client 用来处理获得的相关数据。(数据库同步需要阿里的otter中间件,基于canal)。

  这里我们可以简单地把canal理解为一个用来同步增量数据的一个工具:
   

  canal通过binlog同步拿到变更数据,再发送到存储目的地,比如MySQL,Kafka,Elastic Search等多源同步。

canal使用场景

  场景1:原始场景, 阿里otter中间件的一部分

   场景2:更新缓存

  

  场景3:抓取业务数据新增变化表,用于制作拉链表。( 拉链表:记录每条信息的生命周期,一旦一条记录的生命周期结束,就要重新开始一条新的记录,并把当前日期放入生效的开始日期 )

  场景4:抓取业务表的新增变化数据,用于制作实时统计。

canal运行原理

复制过程分成三步:

    Master主库将改变记录,写到二进制日志(binary log)中

    Slave从库向mysql master发送dump协议,将master主库的binary log events拷贝到它的中继日志(relay log);

    Slave从库读取并重做中继日志中的事件,将改变的数据同步到自己的数据库。

canal的工作原理很简单,就是把自己伪装成slave,假装从master复制数据。

 

posted on 2022-06-01 14:58  胡子就不刮  阅读(485)  评论(0编辑  收藏  举报

导航