1. 摘要:
Mysql日志抽取与解析正如名字所将的那样,分抽取和解析两个部分。这里Mysql日志主要是指binlog日志。二进制日志由配置文件的log-bin选项负责启用,Mysql服务器将在数据根目录创建两个新文件XXX-bin.001和XXX-bin.index,若配置选项没有给出文件名,Mysql将使用主机名称命名这两个文件,其中.index文件包含一份全体日志文件的清单。Mysql会把用户对所有数据库的内容和结构的修改情况记入XXX-bin.n文件,而不会记录SELECT和没有实际操作意义的语句。2. 设计概要:
本项目主要包括两个独立的模块:1、日志抽取(mysql-tracker);2、日志解析(mysql-parser)。日志抽取主要负责与mysql进行交互,通过socket连接以及基于mysql的开源协议数据报文,来进行从mysql主库上dump相应的日志数据下来。而日志解析主要负责与日志抽取模块交互,通过将dump下来的bytes类型的数据,根据mysql协议,对bytes数据进行解析,并封装成易读的event对象。2.1 流程概要:
mysql-tracker 总体流程设计:tracker与mysql交互:1. 建立socket连接2. 加载上次退出时的位点信息(从checkpoint表中加载)3. 利用socket连接发送基于mysql协议的数据包+checkpoint表中的位点信息,创建mysql主库的binlog dump线程4. 利用socket接受(监听)mysql主库传过来的数据包5. 解析数据包(有多种形式,OK包,EOF包,ERROR包,EVENT包等等)6. 如果有EVENT包,将基于byte的数据包解析成event对象7. 将对象存入List或Queue里面tracker与hbase交互:1. 从queue中接收固定量数据(上限:防止内存溢出,下限:防止频繁I/O),或固定时间数据(防止内存溢出)。2. 这里的数据就是event对象3. 将event对象序列化,存入hbase(protobuf 和 entry)4. 存入过程中,保证位点确认机制,如果有关于mysql binlog 的标志性位点,则将该event存入hbase后(注意这里有对特殊xid位点的确认机制,而parser是没有的,直接确认即可),然后再将该event的位点信息存入checkpoint表(维护各种位点信息:包括mysql binlog位点,event表(存如序列化后的event)位点,entry表(存入反序列化后的event)位点)5. 也就是说只要是存入hbase实体数据,都要伴随位点确认机制。这里tracker确认两个方面的位点:mysql binlog 位点(xid:binlog file name + next position) + event表位点(tracker写位点:row key)tracker 每分钟记录位点:
mysql-parser 总体流程设计:(设计思路非常类似,只不过是mysql binlog变成了event表,parser fetch数据从这里fetch)1. 每分中固定时间记录确认的checkpoint位点(可能有重复,长时间没有数据fetch重复最多)
parser与event表交互:1. 建立hbase连接2. 加载上次退出的位点信息(从checkpoint表中加载)3. 通过hbase连接+checkpoint表中的位点信息,不断监听event表一旦event表有更新,就从event表中把序列化的event fetch下来4. 得到的序列化event(bytes) 存入List或Queue里面。parser与hbase交互: