![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Canal源码解读
文章平均质量分 85
canal都是阿里巴巴开开源的数据同步组件/工具,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费
lucasma.eth
这个作者很懒,什么都没留下…
展开
-
canal 源码解析系列-canal的HA机制解析
文章目录引言正文server端的HA机制client端的HA机制引言首先什么是HA?HA指的是High Available,也就是高可用。通常我们一个服务要支持HA都要借助于第三方的分布式同步协调服务,最常用的是zookeeper(以下简称ZK)。canal实现高可用,主要是依赖了zookeeper的几个特性,watcher和EPHEMERAL节点。正文canal的整个HA机制,分为两部分。canal server和client都要有对应的实现。首先在server端,为了减少对mysql dump原创 2021-09-21 17:22:54 · 805 阅读 · 0 评论 -
canal 源码解析系列-store模块解析
引言parser模块用来订阅binlog事件,然后通过sink投递到store。store模块用来执行最终的落库,数据存储。正文核心接口是CanalEventStore,目前只有一个实现类MemoryEventStoreWithBuffer,这是一个基于内存buffer构建内存memory store。先来看下类图:CanalStoreScavenge接口是干啥的?CanalEventStore都继承了它。看下它的接口定义:/** * store空间回收机制,信息采集以及控制何时调用{@lin原创 2021-09-17 08:55:02 · 501 阅读 · 0 评论 -
canal 源码解析系列-sink模块解析
canal 源码解析系列-sink模块解析引言parser模块用来订阅binlog事件,然后通过sink投递到store。Sink阶段所做的事情,就是根据一定的规则,对binlog数据进行一定的过滤。另外还会做一些数据分发的工作。它的核心接口是CanalEventSink,它的核心方法sink用来提交数据的。正文CanalEventSink接口有两个核心实现类,分别是EntryEventSink和GroupEventSink,后者主要是用在多库的场景,比如分库分表。类图结构如下:这俩个实现实现类原创 2021-09-17 08:48:46 · 565 阅读 · 0 评论 -
canal 源码解析系列-EventParser模块解析2
继续接着第一篇的内容讲。本篇主要看详细看看dump的过程。前面的章节我们看到com.alibaba.otter.canal.parse.inbound.AbstractEventParser#start方法里把dump分为两种类型,并行和串行,如下:// 4. 开始dump数据 // parallel默认是true,当然,是可以配置的。"canal.instance.parser.parallel" //如果是原创 2021-09-11 15:15:22 · 774 阅读 · 0 评论 -
canal 源码解析系列-EventParser模块解析1
文章目录引言正文引言上一篇文章,我们讲了canalInstance模块:canal 源码解析系列-CanalInstance模块解析instance 模块包含几个子模块:eventParser: 数据源接入,模拟 slave 协议和 master 进行交互,协议解析eventSink: Parser 和 Store 链接器,进行数据过滤,加工,分发的工作eventStore: 数据存储metaManager: 增量订阅 & 消费信息管理器本篇文章就来详细看看这个EventPar原创 2021-09-09 08:59:42 · 620 阅读 · 0 评论 -
canal 源码解析系列-canal的通信数据结构
protocol模块 主要定义了client和server的通信协议。canal的数据传包含两部分,一部分是进行binlog订阅时,binlog转换为我们所定义的Message,第二部分是client与server进行传输的TCP协议。这两部分采用的都是采用protobuff格式。先把一些基础的概念讲清楚,方便我们后面分析核心链路。先看看Message类,/** * @author zebin.xuzb @ 2012-6-19 * @version 1.0.0 * * 一个message就是g原创 2021-09-02 09:11:27 · 922 阅读 · 0 评论 -
canal 源码解析系列-CanalInstance模块解析
文章目录正文总结下面涉及到源码的地方,我都经过了处理,删减了一些不重要的代码(比如参数校验),便于理解正文上一篇文章canal 源码解析系列-CanalServerWithEmbedded解读提到了CanalServerWithEmbedded 内部管理所有的CanalInstance,通过 Client 的信息(destination),找到 Client 订阅的 CanalInstance,然后调用 CanalInstance 内部的各个模块进行处理。本篇就来深入解读下CanalInstan原创 2021-08-28 07:34:57 · 583 阅读 · 0 评论 -
canal 源码解析系列-CanalServerWithEmbedded解读
canal 源码解析系列-CanalServerWithEmbedded解读前面的文章简单说过这个类。canal server模块的核心接口为CanalServer,有两个实现:CanalServerWithEmbeddedCanalServerWithNetty这两个实现代表了canal的两种应用模式,CanalServerWithNetty在canal独立部署场景发挥作用,开发者只需要实现cient,不同的应用通过canal client与canal server进行通信,canal cli原创 2021-08-22 20:02:18 · 938 阅读 · 0 评论 -
canal 源码解析系列-先把demo跑起来
写在前面把demo跑起来,一个是对canal的功能有个整体的认识,还有就是阅读源码过程中如果有看不懂的地方可以debug下。环境准备zk,安装后启动开启2181端口,具体过程省略。mysql,我本地自己装了一个,方便修改数据验证。另外就是需要确认mysql的binlog格式是ROW才可以。编写demodemo分为两部分,服务端和客户端。这两部分我都是根据源码包里单元测试修改的。server端服务端demo,参考了源码包里的 com.alibaba.otter.canal.ser原创 2021-08-15 22:01:14 · 657 阅读 · 0 评论 -
canal 源码解析系列-工程结构说明
canal 源码解析系列-工程结构说明这个是下载的源码在idea里的工程结构,我们从上到下开始捋。admin模块canal-admin设计上是为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作。client模块顾名思义,这是canal的客户端源码。canal采用的是client-server模式,通常我们使用canal的功能,是作为client接入,如果是java,就要引用下面这个依赖:<dependency>原创 2021-08-14 23:35:36 · 820 阅读 · 0 评论 -
datax和canal对比
datax和canal对比文章目录datax和canal对比前言功能简介对比dataxcanal前言datax和canal都是阿里巴巴开开源的数据同步组件/工具,但是二者在功能架构、使用场景上又有些区别。我刚接触到这两个组件的时候,经常混淆他们,不太能分清楚他们各自的使用场景。今天这篇文章就打算彻底对比下两者的共同点和差异。功能简介DataX 是阿里巴巴开源的离线数据同步工具/平台,内置实现了包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase原创 2021-08-08 21:44:48 · 11083 阅读 · 0 评论