otter学习(5)— canal和otter的关系?

时间:2021-08-11 23:14:37

在回答这问题之前,首先来看一张canal&otter和mysql复制的类比图:
otter学习(5)— canal和otter的关系?
mysql的自带复制技术可分成三步:

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

  2. slave将master的binary log events拷贝到它的中继日志(relay log),这里是I/O thread线程;

  3. slave重做中继日志中的事件,将改变反映它自己的数据,这里是SQL thread线程。

基于canal&otter的复制技术和mysql复制类似,具有类比性:

  1. Canal对应于I/O thread,接收Master Binary Log;

  2. Otter对应于SQL thread,通过Canal获取Binary Log数据,执行同步插入数据库;

两者的区别在于:

  1. otter目前嵌入式依赖canal,部署为同一个jvm,目前设计为不产生Relay Log,数据不落地;

  2. otter目前允许自定义同步逻辑,解决各类需求;
    a. ETL转化. 比如Slave上目标表的表名,字段名,字段类型不同,字段个数不同等.
    b. 异构数据库. 比如Slave可以是oracle或者其他类型的存储,nosql等.
    c. M-M部署,解决数据一致性问题
    d. 基于manager部署,方便监控同步状态和管理同步任务.