概要:
把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数据的流程。