canal设计上的一些小分析

1. 介绍

canal是阿里开源的一个binlog解析工具。本文对其设计上的一些小细节进行一番琢磨。

如果还不熟悉canal可以看看canal官方wiki和我写的canal源码解析系列。然后再看我现在这篇文章,可能会有更多的共鸣。

2. binlog解析原理的小思考

按照wiki所说,从上层来看,复制分成三步:

master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);

slave将master的binary log events拷贝到它的......

binlog日志解析开源工具canal源码浅析(6):store模块

1. 介绍

EventStore是EventSink的下游组件。Sink组件处理解析数据完毕后则将数据交给store处理。

在Sink组件的实现类EntryEventSink的成员变量中已经包含了了EventStore对象:

在SINK阶段执行sinkData方法时调用的doSink方法中进行了将数据提交到store的操作。......

binlog日志解析开源工具canal源码浅析(5):filter模块

1. 承上启下

之前我们是介绍了sink模块。sink模块中主要负责解析结果的过滤分发和归并操作。但是在上次我们的源码分析中发现canal sink包中不包含过滤相关的实现。过滤相关的实现则全部被放到了一个单独的filter包当中。首先我们先来看看sink模块中是在什么时候用到filter的。

在之前的分析中我们知道sink的实现类是sink包下的EntryEventSink类,其中包含sinkData方法。如下图所示,在sinkData方法中主要就已经为按成了sink组件的主要功能,即filter和sink。

binlog日志解析开源工具canal源码浅析(4):sink模块

1.sink模块介绍

1.1 基本结构功能

sink模块也是instance当中的一个重要构成部分。它是parser和store模块中间的一个组件,与parser和store的关系可以用下图表示:

主要功能是:

数据过滤:支持通配符的过滤模式,表名,字段内容等

数据路由/分发:解决1:n (1个parser对应多个stor......

binlog日志解析开源工具canal源码浅析(3):parser和protocol模块

1.Parser介绍

在binlog日志解析开源工具canal源码浅析(2):instance模块一文中我们介绍了instance模块的作用。在启动一个instance之后,为了能够去解析mysql的binlog日志,我们首先要启动的核心组件就是EventParser了。

1.1 EventParser的功能定位

为了更好的理解Parser的作用,我们首先需要回顾下EventParser的定位:

instance中的核心组件

sink的上级组件,主要完成一些协议包的解析、位点管理等