canal的重写与parser源码分析

来源:互联网 发布:淘宝火锅底料 编辑:程序博客网 时间:2024/06/14 06:57

概要:

把canal的parse部分整个抽离了出来,主要是方便以后进行本机调试与源码分析,现在放上来。

其实后面已经把canal整个拆开了,拆成tracker和parser,后续的这个版本后面再慢慢放上来,当把配置服务写好后再放到这里。

项目结构:

整体分为dbsyn、driver、common、controller、filter、protocol、parser。其中

common:以下canal的基类和接口,主要都是以server类和instance类继承,公共的方法都有start()、stop()和isStart()

controller:关于控制类的一些基类

filter:在canal的.properties 配置文件中会用到的,在zookeeper配置信心中会用到的正则过滤信息

protocol:基于mysql,protobuf等等的协议解析

dbsyn:基于mysql协议的基于byte,位的解析与转化

driver:重写的基于socket的与mysql 连接。负责与mysql的相关交互

parser(主要流程):关于数据抓取与数据解析的上层逻辑

解析流程:

运行的主类集中在parser里面的MysqlCanalParser类,首选初始化两个基于mysql socket重写jdbc连接,mysqlconn主要负责binlog数据的抓取,而metaConn则负责对表结构数据的抓取,所以在这里的mysql赋劝上需要一个全局的或者对应接的库表的select权限。然后通过findstartposition() 找到需要dump数据的位置(在mysql中的位置)。然后开始dump,并利用eventConvert解析fetch下来的event。最后解析成entry输出解析后的信息。

部署:

项目在github上 

地址:https://github.com/hackerwin7/canal-rewrite

git clone https://github.com/hackerwin7/canal-rewrite.git 把项目从github上拖下来。

MysqlCanalParser类里46行:修改相应的配置参数,按顺序分别是: mysql用户名,mysql用户密码,mysql地址与端口,mysql slaveID(一般随便取一个就行)

mysql 权限: 为你的mysql用户配置相应权限,不然无法从mysql fetch数据

CREATE USER canal IDENTIFIED BY 'canal';  GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;FLUSH PRIVILEGES;
启动MysqlCanalParser类 main方法,然后试着在相应mysql库,插入数据,删除数据,程序会fetch到相应数据并输出出来。

后记:

此程序本来是对canal的parser部分作调试与分析用的,具体细节都可以通过调试此项目了解mysql dump数据的流程。





0 0
原创粉丝点击