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。