获取binlog过程
启动线程
AbstractEventParser 有个线程对象 parseThread,它的任务就是执行dump所有工作
判断从哪里开始dump
这里先了解下canal的存储机制:FileMixedMetaManager启动时会从meta.dat加载数据,这里记录了每个Client消费的进度。每当有Client提交Ack,会实时更新内存中的信息,并且每秒同步一次到meta.dat。
因此,这里有2种情况:
- meta.dat存在历史信息:取出所有Client中最小的position,从这里开始dump
- meta.dat不存在或者为空:执行 show master status,从最新位置的前一条log开始
注册slave节点
canal需要将自己伪装成slave节点,代码位置在MysqlConnection.sendRegisterSlave(),主要是发送RegisterSlaveCommandPacket类型的消息对象,command=0x15,具体可以查看代码和官方文档