栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Alibaba Canal调研报告

Alibaba Canal调研报告

前述:Canal是纯Java语言开发,解析数据库增量日志,为目标端提供消费&订阅。源端仅仅支持MySQL , 目标端支持 Kafka,RocketMq,RabbitMq,MySQL,ES等。

原理:基于MySQL的主从复制,Canal 将自己伪装成MySQL slave,向MySQL master发送dump协议。Master收到后,会向slave (也就是Canal) 推送binary log。Canal解析binary log对象。提供消费和订阅

架构:

 

Server:一个Canal实例,对应一个JVM,可以监听MySQL master的binlog,server中包含下面的组件

Instance:这个代表了一个canal server中的多个MySQL instance,说明一个Canal Server可以搜集多个库的数据。

EventParser:获取binlog日志,解析binlog日志

 

EventSink:使用设置的filter对binlog进行过滤。

 

EventStore:用来存储filter过滤后的数据,目前仅支持内存存储,后期会在本地文件中存储

metaManager:这个用来存储元数据,例如,消费到的游标,当前活动的server信息

Canal的HA机制

Canal的HA机制是以来于zookeeper的。分为两个部门,Canal Server 和 Canal Client 都对HA有对应的实现

 Canal Server:为了减少对MySQL dump的请求,不同server上的相同instance在同一时间只能有一个处于running,其他处于standby状态

 Canal Client:为了保证有序性,一份instance同一时间只能由一个canal Client消费,否则客户端无法保证有序性。

架构图如下:

 

启动步骤:

1、Canal Server 要启动Canal Instance 需要向zk进行一次启动预判断(创建一个临时节点,哪个server创建成功,才可以启动),判断成功后,才允许启动

2、创建zk节点成功后,对应的 Canal Server 就启动对应的 Canal Instance ,没有创建成功的会处于standby状态

3、一旦zk发现Canal Server 创建的节点消失后,zk会立即通知其他节点再进行1的操作

4、Canal Client 每次连接时,会询问zk是哪个Server启动了Instance ,然后再建立连接。Canal Client启动方式和server一样,利用zk抢占创建临时节点。

Canal Server启动后,会接受MySQL的binlog,解析数据,存储数据,提供接口给 Canal Client 消费

Canal Client 启动后,会和Canal Server建立连接,读取数据,消费&订阅数据

单机节点部署流程,并且同步数据到MySQL:
  1. 启动一个Zookeeper
  2. 下载Canal admin(Canal的web界面),修改配置文件(conf/application.yml),导入sql(conf/canal_manager.sql),启动即可

 

在Canal Admin界面上配置集群,因为是单节点,所以只配置一个zk

 

成功后就显示了

 

然后点击操作的主配置

 

完成后保存即可

  1. 启动Canal Server (Canal Server和MySQL交互,读取binlog),修改配置文件canal_local.properties 和 canal.properties

canal_local.properties:

 

canal.properties:

 

启动Canal Server后,会自动添加到集群zk1下,在web界面可以直接看到

 

然后新建instance即可。

 

保存后,会直接在界面上显示

 

  1. 启动 Canal adapter ,通过配置实现同步数据到MySQL,修改配置文件,conf/application.yml和 conf/rdb/mytest_user.yml

Application.yml:

 

mytest_user.yml:

 

  1. 给test.test 表中插入一条数据,test1.test表中数据会自动同步

 

插入一条数据

 

Canal集群部署

1、首先启动 zk和Canal Admin ,构建一个集群

2、启动canal.deployer(Canal Server),我这里启动了三个Server,分别为server1,server2,server3

 

3、创建instance实例,我这里也创建了三个,创建一个实例,会自动分配在server上,这里三个都在Server3上

4、此时如果挂掉server3,会自动切换到其他server上继续工作。

这里server2已经挂掉,可以看到instance自动切换到server2上

 

 5、如果全部server挂掉,所有的instance就停止了,再次启动server后,会自动启动所有instance

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/629814.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号