canal.client 源码分析

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

一、整体设计

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

相关推荐

Canal 丢失数据与解决方法

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

zoov的专栏 9322

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

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

xcz123x的博客 315

基于Canal数据同步系统搭建

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

qq_38940885的博客 541

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

基于图神经网络的社交网络虚假账号检测系统 (Graph-based Fake Account Detection System, GFADS)

FOLLOWSRETWEETSSHAREDCOMMENTSLIKESMENTIONSUseruser_idusernamejoin_datebioavatar_urllocationverifiedis_fakeLOAD CSV这是决定模型性能的关键环节,需结合和。XXedge_indexy新账号缺乏历史数据和丰富关系。全网图可能包含数亿节点和数十亿边,难以直接训练。社交网络是动态变化的,虚假账号策略也在不断进化。获取大规模、高质量的真实/虚假账号标注数据非常困难。

Deng945201314的博客 1480

Ubuntu20.04下SRS流媒体服务器的安装与开机自启动优化指南

本文详细介绍了在Ubuntu20.04系统下安装SRS流媒体服务器并优化开机自启动的完整指南。从基础环境准备、服务管理方案对比到systemd自启动深度优化,提供了实用的配置技巧和排查方法,帮助用户快速搭建稳定的流媒体服务环境。特别推荐使用systemd方案实现高效的自启动管理。

weixin_29313239的博客 410

Allegro格式PCB转换成Pads操作指导

变量:AEX_BIN_ROOT 值:D: MentorGraphics>PADSVX1.2>SDD_HOME>translators>win32bin (值:软件按装的位置,可以是9.5版本,也可以是VX1.0等不同的版本)。变量:HOME 值:C:Users>win7>AppData>Roaming>SPB_Data (这个值是allegro快捷键存放位置器,也可以随意放置在那个盘,我们可以采用默认的路径)。第4步:打开 PADSLayout软件,然后选择导入文件,选择刚刚处理的 allegro文件。

weixin_54787054的博客 3716

通过情感分类实例 详细介绍如果借助Huggingface平台 完成Transformers模型运行(包括配置环境-tokenizer-Model-输出头-预测)

attention_mask和padding是配套使用的,当人为去修改padding的时候,也要把attention_mask里面的参数进行修改。下载Huggingface包,Huggingface可以说是一个社区,集成了很多nlp的模型、数据集、预训练权重文件等等,并且免费,只需要pip install下载即可。那么用什么做分类就选择什么输出头,就import什么东西。代码中使用了自动分词器选择,它是由checkpoint指定的预训练模型关联的,不用我们自己选择tokenizer,它自动帮我们选择好了。

LZL2020LZL的博客 1135

Ascend开发包Acllite安装

设置环境变量,配置程序编译依赖的头文件,库文件路径。“$HOME/Ascend”请替换“Ascend-cann-toolkit”包的实际安装路径。将YOLOV7原始模型转换为适配昇腾310处理器的离线模型(*.om文件),放在model路径下。运行完成后,会在样例工程的out目录下生成推理后的图片,显示对比结果如下所示。可以使用以下两种方式下载,请选择其中一种进行源码准备。请从以下链接获取该样例的输入图片,放在data目录下。执行以下命令,执行编译脚本,开始样例编译。执行运行脚本,开始样例运行。

如果想成为中心,那么就到中心去吧。 316

032、准谐振反激变换器(QR-Flyback)原理

文章摘要: 本文以65W PD快充炸管案例切入,解析准谐振反激变换器(QR-Flyback)原理。通过主动利用漏感与MOS结电容的谐振,在Vds波谷开通实现近似ZVS,显著降低开关损耗与电压应力。对比传统反激,QR模式轻载效率提升8%,Vds尖峰减少23%。关键设计要点包括:变压器漏感需<3%、谷底检测电路需抗干扰、启动阶段需防过冲。推荐NCP1340等专用控制芯片,并强调VCC电容优选低ESR陶瓷材质。QR适用于30W-150W场景,其核心优势在于轻载效率优化,但需平衡漏感控制与可靠性。作者结合实测数据与

Jack010169的博客 112

【DaVinci Developer专题】-36-创建一个“既读又写”的Sender Receiver Port(SR PR-Port)

有时会遇到SWC需要对一个Port进行“既可以读,也可以写”的操作。以下图为例,Test_A_SWC中Test_A_Port是P-Port;Test_B_SWC中Test_A_Port是R-Port。Test_C_SWC需要对Test_A_Port同时进行“读”和“写”。 该篇将详细介绍PR-Port的创建方法。 目录 1 创建一个S/R Port Interface 2 将一个PR-Port端口添加至Application Component 3 PR-Port端口初始化 4 Run.

「汽车电子助手」的博客 3013

在Ubuntu上安装Node.js编程

在Ubuntu操作系统上安装Node.js是非常简单的,本文将为您提供详细的安装步骤。这是一个简单的Node.js HTTP服务器示例,它将在本地主机的端口3000上监听请求,并返回"Hello, World!npm是Node.js的包管理器,您可以使用它来安装和管理Node.js模块。您已成功在Ubuntu上安装了Node.js,并创建并运行了一个简单的Node.js应用程序。现在,您已经成功安装了Node.js和npm,让我们创建一个简单的Node.js应用程序并运行它。如有任何疑问,请随时提问。

CodeNexus的博客 3524

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值