canal.client 源码分析

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

一、整体设计

1.1 功能概述

封装与 Canal Server 进行交互的客户端,提供两种实现给外部使用:

  • 简单连接:直接通过 socket 与 server 进行交互,实现连接、订阅、批量获取、提交和回滚等操作。
  • 有 HA 的 Cluster 连接:基于简单连接方式进行封装,通过 ZooKeeper 实现 client 端的 HA。

1.2 目录结构

其中 kafka 包和 rocketmq 包实现了接收到的消息直接发送到消息队列中,目前先重点关注与服务端的交互和消息的处理流程,后续会重点关注 kafka 包的实现,为目前生产上 C/S 端分离 ==> 集成 的改造做准备。

1.3 核心类

核心类类图

  • ClientIdentity
    canal client 和 server 交互之间的身份标识,目前 clientId 写死为 1001(目前 canal server 上的一个 instance 只能有一个 client 消费,clientId 的设计是为 1 个 instance 多 client 消费模式而预留的,暂时不需要理会)。
  • CanalConnector
    SimpleCanalConnector / ClusterCanalConnector:两种 connector 的实现,simple 针对的是简单的 IP 直连模式,cluster 针对多 IP 的模式,可依赖 CanalNodeAccessStrategy 进行 failover 控制。
  • CanalNodeAccessStrategy
    SimpleNodeAccessStrategy / ClusterNodeAccessStrategy:两种 failover 的实现,simple 针对给定的初始 IP 列表进行failover选择,cluster 基于 ZooKeeper 上的 cluster 节点动态选择正在运行的 canal server。
  • ClientRunningMonitor / ClientRunningListener / ClientRunningData
    client running 相关控制,主要为解决 client 自身的 failover 机制。canal client 允许同时启动多个 canal client,通过 running 机制,可保证只有一个 client 在工作,其他 client 做为冷备。当运行中的 client 挂了,running 会控制让冷备中的 client 转为工作模式,这样就可以确保 canal client 也不会是单点。保证整个系统的高可用性。ClientRunningData 对应 ZooKeeper 上的 /otter/canal/destinations/xxx/1001 节点数据。

二、类设计

2.1 CanalConnector

2.1.1 接口介绍

CanalConnector 的作用是与服务端进行交互,支持连接、订阅、获取数据、回滚、

canal-client的安装部署 概述 canal client将从canal server获取的binlog数据以json格式发送到各种MQ中(rabbitmq,redis,kafka)。 部署 第一步:下载解压项目,使用的是与canal-server 1.0.22版本对应的clientcanal-client-1.0.22.tar.gz): 项目git地址:https://github.com/BooksCup/ca... 阅读详情

相关推荐

Canal高可用架构部署

一、前言 canal 是阿里的一款开源项目,纯 Java 开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB)。 canal 模拟 mysql slave 的交互协议,伪装自己为 mysql slave,向 mysql master发送 dump 协议; mysql master 收到 dump 请求,开始推送binary log给 slave(也就是canal) canal 解析 binary log对象(原始为byte流)。 &nbs.

zlt2000的博客 2205

canal-client:canal客户端、解析binlog日志将数据从mysql过渡到rabbitmq和mongodb中

canal-client 项目介绍 canal客户端、解析binlog日志将数据从mysql过渡到rabbitmq和mongodb中 软件架构 软件架构说明 安装教程 下载最新版本的canal服务端, 解压缩 mkdir /tmp/canal tar zxvf canal.deployer-$version.tar.gz -C /tmp/canal 解压完成后,进入/tmp/canal目录,可以看到如下结构: drwxr-xr-x 2 jianghang jianghang 136 2013-02-05 21:51 bin drwxr-xr-x 4 jianghang jianghang 160 2013-02-05 21:51 conf drwxr-xr-x 2 jianghang jianghang 1.3K 2013-02-05 21:51 lib drwxr-xr-x 2 j

Canal源码分析client工作过程

client的工作过程,需要我们自己去编写对应的逻辑,我们目前只能从example写的例子来看。目前examle中提供了两个例子,一个是单机的,一个是集群的cluster,我们后续如果需要进行开发的话,其实也是开发我们自己的client,以及client的一些逻辑。我们主要看下集群的client是如何实现和消费的,又是怎么和server进行数据交互的。 我们来看看具体的代码: protec...

1949

探秘Canal Client:实时数据库同步神器

探秘Canal Client:实时数据库同步神器 是一个轻量级的Java库,它作为阿里巴巴开源的Canal数据同步框架的客户端实现。Canal是著名的数据库变更数据捕获(CDC, Change Data Capture)工具,而Canal Client则是开发者方便地在自己的应用程序中集成Canal功能的关键组件。 项目简介 Canal Client旨在帮助开发者实现数据库的实时同步,尤其适用于大...

gitblog_00097的博客 736

Canal Client API

  快速体验 1.  首先需要先启动canal server,可参见:Canal Server的QuickStart 2.  运行canal client,可参见:canal clientClientExample   如何下载 1.  如果是maven用户,可配置mvn dependency <dependency> <groupId>com...

agapple 1491

使canal的task配置文件支持带默认值的环境变量

项目中为了保持mysql和es的数据同步,引入了canal项目, 项目采用源码构建部署,docker进行发布。 其中部署client-adapter时,因需要测试/正式使用同一个配置文件,通过docker的环境变量进行区分,遇到一个情况就是 无法识别yml文件中如下这种占位符 ${CANAL_SOURCE_KEY:defaultDS} 通过分析源码,发现加载参数的时候,因为 YmlConfigBinder.bindYmlToObj加载配置文件的过程中,处理占位符时,没有传入默认值分割符,所以并不..

julywind1的专栏 1446

Canal原理及源码剖析

文章目录canal原理核心源码canal应用mysqldeployer and serverclient-adapterESdebug canalcanal源码剖析相关错误及解决办法mysql相关binlog_checksum待整理 canal原理 mysql(binlog) -> canal server(Event) -> kafka/rocketmq/tcp(Message) -...

weixin_43834662的博客 935

canal 源码参考

源码系列 http://www.tianshouzhi.com/api/tutorials/canal/382

wangbaosongmsn的博客 213

Canal 丢失数据与解决方法

0 背景 我在生产环境使用canal的时候,由于用的是嵌入式模式,所以经常需要发版重启。每次发版的时候,canal监控的数据库是有数据持续写入的,在这个过程中,下游的消费者时常提出数据存在丢失的情况,那么下面通过分析canal的源码寻找数据丢失的原因。 1 Canal 消费流程源码分析 略过一些启动过程,直接找到消费binlog的主流程代码,是AbstractEventParser类的start函数中,会启动一个子线程parseThread,在run函数中,有几个点需要注意: 初始化上次消费的Positi

zoov的专栏 9318

canal的重写与parser源码分析

canal的parse部分整个抽离了出来,主要是方便以后进行本机调试与源码分析,现在放上来。 其实后面已经

心之所向,无惧无悔! 4366

【源码解析】canal核心功能源码解析

【源码解析】canal核心功能源码解析

秋装什么的博客 1928

源码分析 | 数据异构Canal 初探

源码分析 Canal 系列开始了,一个全新的系列,即能探讨 canal 本身的实现原理,也是笔者源码阅读技巧的展示。 1、应用场景 提到 Canal,大家应该都能想到这是一个用于解析 MySQL binlog 日志的工具,并将 MySQL 数据库中数据同步到其他存储介质中,例如 Elasticsearch。 即 Canal 一个非常常用的使用场景:数据异构,一种更高级别的数据读写分离架构设计方法。 随着业务不断的发展,企业发展到一定阶段,发现单体的关系型数据库已无法支撑业务高速发展带来数据不断累.

xcz123x的博客 307

Canal 源码分析02 -- Canal 代码结构和功能概述

http://www.iocoder.cn/Canal/tianshouzhi/tutorials/ 1.Client:客户端 启动和建立连接,发送和接收数据,核心接口为CanalConnector 2.Client-adapter : 客户端的适配器 3.common : 公用的组件和工具类 4.dbsync: 数据库同步的,包括解析出来的event 5.deployer: ca...

郭传志的博客 414

使用canal分析binlog(二) canal源码分析

在能够跑通example后有几个疑问 1. canal的server端对于已经读取的binlog,client已经ack的position,是否持久化,保存在哪里 2. 即使不启动zookeeper,canal也可以正常运行,canal使用zookeeper或者不使用有什么影响 从github上下载源码,https://github.com/alibaba/canal...

weixin_30950237的博客 530

坑一:canal 的一处TODO 引发的一地华子

来个定场 点扛start一时爽,日志报错眼环铃,搞不清楚东,猜不明白西,全无头绪急急急,哎呀~嗒~我去~ 提要: 业务场景:纸质票据的打印记录(order_print_record)与OCR技术识别纸质票据的采集记录(order_collection_record_0)做left join关联查询; 因系统是分库分表,2个db实例 15个库(其它不此处展开),需要做数据归并后高级查询,引入了es做高级搜索、cana做lmysql binlog异步...

fifthangel8080的博客 1133

canal源码分析(一)客户端程序

canal服务端主要是获取binlog信息,canal客户端是负责把获取到的信息推送到不同的下游。我们将从了解canal的开始一步一步解析它。 首先是客户端程序实例。 需要注意,这里只分析canal客户端源码,并非canal-kafka源码。canal-kafka是将kafka作为客户端嵌入到canal里的,并且是直接将信息转成ByteString发送到kafka。 详情:...

桃花惜春风 3579

基于Canal数据同步系统搭建

本篇文章我们基于Alibaba的开源组件Canal进行搭建一套数据同步系统,将分表数据进行聚合。

qq_38940885的博客 538
上一篇: Linux 安装 Elasticsearch 和 Kibana
下一篇: maven-plugin-shade 详解
六开箱
博客等级 码龄10年 39粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值