Canal接收、存储、消费binlog过程详解

获取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,具体可以查看代码和官方文档


版权声明:本文为qq_28834355原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。