【深入浅出MySQL】「数据同步架构」分析探索Canal开源技术原理和架构

分析探索Canal开源技术原理和架构

  • 背景说明
  • Canal基本介绍
    • Canal作用方向
    • MySQL同步原理
      • Binlog Dump交互
      • Binlog的协议模型
      • Canal的模拟slave角色
      • Canal的消费订阅
    • Canal Server模块
    • Canal Instance模块
    • 参考资料
    • 类似开源项目

背景说明

在早期阶段,阿里巴巴B2B公司由于其在杭州和美国两地均设有数据中心,因此面临了跨机房数据同步的迫切需求。为了满足这一业务需求,公司早期主要依赖于基于触发器的机制来获取和同步数据的增量变更。
在这里插入图片描述然而,自2010年起,随着技术的发展和业务需求的升级,阿里系公司开始探索新的同步策略。他们逐步转向基于数据库日志解析的技术,以更高效、更准确地捕获数据的增量变更,并基于此构建了增量数据的订阅与消费服务。这一转变不仅优化了数据同步的效率,也为公司后续的业务发展奠定了坚实的基础,标志着阿里巴巴在数据处理和同步领域迈入了新的纪元。

Canal基本介绍

Canal [kə’næl],该名称直译为“水道”或“管道”,形象地描绘了Canal在数据传输中的核心作用,如同水流在渠道中自然流淌,数据也在Canal的引导下顺畅传输。采用纯Java开发,这一选择确保了其跨平台性和广泛的兼容性,使开发者能够轻松集成到各种Java生态系统中。

Canal作用方向

Canal专注于数据库增量日志的准实时解析,为开发者提供了一种高效、可靠的数据订阅与消费机制。目前,其开源版本主要支持MySQL数据库,但未来有望扩展至更多数据库类型。

通过Canal,开发者可以实时捕获数据库的变化,并基于这些变化进行相应的业务处理,从而实现数据的实时同步、分析或触发其他业务逻辑。Canal的这一特性在大数据、实时计算、分布式系统等领域具有广泛的应用前景。

MySQL同步原理

MySQL的主从复制(Master-Slave Replication)机制是实现数据同步的关键技术,其中Slave节点的同步原理可以概括为以下两个核心步骤:
在这里插入图片描述

  • I/O Thread读取并存储Binlog

    • Slave节点的I/O线程连接到Master节点,并请求发送二进制日志(Binary Log,简称Binlog)中的事件。
    • Master节点接收到请求后,开始发送Binlog中尚未被Slave节点同步的事件数据。
    • Slave节点的I/O线程接收这些事件数据,并写入到本地的中继日志(Relay Log)中,以备后续处理。
  • SQL Thread应用变更到数据库

    • Slave节点的SQL线程从中继日志中读取事件。
    • 对于每个事件,SQL线程将其转化为在Slave上执行相应的SQL语句或变更。
    • SQL线程按顺序执行这些语句,从而在Slave数据库上应用与Master数据库相同的变更,保持数据的一致性。

Binlog Dump交互

在这里插入图片描述

Binlog的协议模型

Binlog,即MySQL的二进制日志,记录了数据库的所有更改,使得MySQL可以支持数据复制和恢复操作。在Binlog中,每一个变更都被封装为一个或多个Event。以下是对Binlog Event结构的详细分析:
在这里插入图片描述
Binlog文件以4个字节的魔数(Magic Number)开始,其值为0xfe 0x62 0x69 0x6e,对应ASCII码的"þbin"。随后是各种Event的序列,每个Event都具有相同的通用结构,由Event Header和Event Data两部分组成。

Canal的模拟slave角色

为了捕获数据库中的实时增量数据,一种常用的技术方法是模拟MySQL主从复制中的Slave端的行为。具体而言,这涉及到一个精心的设计,即通过实现MySQL主从复制协议中的关键部分,使应用程序能够伪装成MySQL的Slave节点(类似于I/O线程的角色),从而实时接收并处理主节点(Master)上的数据变更。
在这里插入图片描述在这种方法中,应用程序会模拟Slave节点与Master节点之间的通信协议,包括建立连接、请求Binlog日志、接收并解析Binlog事件等步骤。通过这种方式,应用程序能够实时地获取到主节点上发生的所有数据变更,如插入、更新、删除等操作,并基于这些变更进行后续的数据处理或同步操作。

Canal的消费订阅

在数据处理的生态系统中,数据消费扮演着至关重要的角色。它基于特定的网络协议,为不同的业务需求提供了灵活且高效的数据订阅与消费机制。这一原理的实现,借鉴了数据库主从复制中的SQL Thread模式,但更进一步地融入了业务自定义的灵活性。
在这里插入图片描述
在数据消费阶段,系统采用了类似于SQL Thread的处理机制。但与SQL Thread不同的是,这里的数据处理不再局限于简单的数据库操作,而是可以根据业务需求进行高度自定义。通过定义灵活的数据处理规则和逻辑,系统可以实现对数据流的精细化加工和处理,从而满足不同业务场景下的复杂需求。

Canal Server模块

在Canal的架构中,server 代表着一个独立运行的Canal服务器实例,它依托于Java虚拟机(JVM)环境执行。每个server实例都承载着Canal的核心功能和数据处理逻辑。
在这里插入图片描述基于netty网络处理 + protobuf数据传输格式

Canal Instance模块

Canal的instance概念对应于一个特定的数据队列或数据流。这种设计使得一个server实例能够同时处理和管理零个到多个(0…n)instance在这里插入图片描述每个instance负责监控、捕获并传递特定数据源(如MySQL数据库)的变更数据到相应的消费者或处理逻辑中。

参考资料

  • http://dev.mysql.com/doc/internals/en/binary-log.html
  • https://github.com/alibaba/canal/wiki
  • http://dev.mysql.com/doc/internals/en/binary-log.html
  • http://dev.mysql.com/doc/internals/en/replication-protocol.html

类似开源项目

  • https://github.com/linkedin/databus
  • http://code.google.com/p/tungsten-replicator/
  • http://code.google.com/p/open-replicator/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/732407.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WPF文本框中加提示语

效果&#xff1a; WPF中貌似不能像winfrom里一样直接加提示语&#xff0c;需要使用TextBox.Style&#xff0c;将Trigger标签插入进去。 贴源码&#xff1a; <WrapPanel Name"TakeOverExpressNo1"><Label Content"物流单号&#xff1a;"><…

力扣SQL50 每月交易 I 求和 SUM(条件表达式) DATE_FORMAT(日期,指定日期格式)

Problem: 1193. 每月交易 I &#x1f468;‍&#x1f3eb; 参考题解 Code select DATE_FORMAT(trans_date, %Y-%m) AS month,country,count(*) as trans_count,count(if(state approved, 1, NULL)) as approved_count,sum(amount) as trans_total_amount,sum(if(state appr…

MS17-010(Eternal blue永恒之蓝)漏洞利用+修复方法

目录 一、漏洞简介 漏洞原理 影响版本 二、漏洞复现 三、复现过程 1、扫描局域网内的C段主机&#xff08;主机发现&#xff09; 扫描结果&#xff1a; 2.使用MSF的永恒之蓝漏洞模块 3.对主机进行扫描&#xff0c;查看其是否有永恒之蓝漏洞 4.准备攻击 四、漏洞利用 …

华为---OSPF被动接口配置(四)

9.4 OSPF被动接口配置 9.4.1 原理概述 OSPF被动接口也称抑制接口&#xff0c;成为被动接口后&#xff0c;将不会接收和发送OSPF报文。如果要使OSPF路由信息不被某一网络中的路由器获得且使本地路由器不接收网络中其他路由器发布的路由更新信息&#xff0c;即已运行在OSPF协议…

【泛微系统】解决启动非标功能时提示客户ID不一致的问题

解决启动非标时提示CID不一致的问题 泛微OA系统是一个非常丰富的系统,我们在日常工作中会经常遇到很多业务需求,我们会用到很多功能来承载这些需求的实现;OA系统里有标准功能,也有非标准的功能;对于非标准的功能需要打非标补丁包; 有些同学在个人学习系统的过程中会安装本…

[图解]企业应用架构模式2024新译本讲解16-行数据入口2

1 00:00:00,750 --> 00:00:02,470 好&#xff0c;我们来看代码 2 00:00:03,430 --> 00:00:06,070 我们一步一步执行 3 00:00:42,500 --> 00:00:45,000 先初始化数据 4 00:00:52,300 --> 00:00:53,650 创建连接 5 00:00:55,900 --> 00:00:56,970 这里面 6 0…

Electron快速入门(二):在(一)的基础上修改两个文件完成自定义显示时间和天气的标题栏

修改主进程:main.js // main.jsconst { app, BrowserWindow } = require("electron"); const path = require("node:path"); const createWindow = () => {try {const mainWindow = new BrowserWindow({width: 1200,height: 870,alwaysOnTop: true,fr…

aws的alb,多个域名绑定多个网站实践

例如首次创建的alb负载均衡只有www.xxx.com 需要添加 负载 test2.xxx.com aws的Route 53产品解析到负载均衡 www.xxx.com 添加CNAME&#xff0c;到负载均衡的dns字段axx test2.xxx.com 添加CNAME&#xff0c;到负载均衡的dns字段axx 主要介绍目标组和规则 创建alb就不介…

【报错解决】引入@ComponentScan注解注册bean容器后,导致的接口404问题

引入ComponentScan注解注册bean容器后&#xff0c;导致的接口404问题 背景 由于微服务开发中&#xff0c;经常需要在公共模块在引入一些公共模块&#xff0c;供其他服务使用&#xff0c;但是其他服务需要在启动类中配置ComponentScan注解扫描这个公共模块下注册的 bean&#…

sdlan如何智能组网?

【天联】组网是一款异地组网内网穿透产品&#xff0c;由北京金万维科技有限公司自主研发&#xff0c;旨在解决不同地区电脑与电脑、设备与设备、电脑与设备之间的信息远程通信问题。【天联】的操作简单、跨平台应用、无网络要求以及独创的安全加速方案等特点&#xff0c;使得它…

全国实体商铺店铺商家采集工具,一键采集商家手机号,让你轻松找到目标客户

随着互联网的发展&#xff0c;越来越多的商家开始在网上开展业务&#xff0c;实体商铺的竞争也日益激烈。为了更好地吸引客户&#xff0c;很多商家都选择了线上推广和营销。然而&#xff0c;仅仅依靠线上推广是远远不够的&#xff0c;线下的实体商铺也需要积极拓展客源。因此&a…

C语言学习记录20240622

这次需要用 C 语言库 Allegro 写爆破彗星游戏。项目有一些描述如需要绘制飞船、彗星、子弹&#xff0c;需要响应按键实现飞船加速、减速、转向、开火&#xff0c;需要绘制弹道&#xff0c;需要实现彗星旋转、缩放&#xff0c;需要碰撞检测&#xff0c;需要显示计分。 这些用 w…

Docker 搭建 MinIO 对象存储

Docker 搭建 MinIO 对象存储 一、MinIO MinIO 是一个高性能的对象存储服务器&#xff0c;用于构建云存储解决方案。MinIO 允许你存储非结构化数据&#xff08;如图片、视频、日志文件等&#xff09;以对象的形式。MinIO 提供简单的部署选项和易于使用的界面&#xff0c;允许你…

高校新闻头条系统

摘 要 随着互联网技术的快速发展&#xff0c;网络几乎成为了人们搜集信息和交流沟通最方便、快捷的通道&#xff0c;科技创新一直在影响着人们的生活&#xff0c;人们的衣食住行也在不断变化&#xff0c;与此同时&#xff0c;也大大改变了人们获取信息的方式&#xff0c;人们获…

如何恢复 Mac 数据?适用于 Mac 的免费磁盘恢复软件

对于大多数 Mac 电脑用户来说&#xff0c;丢失数据是他们最不想遇到的噩梦之一。然而&#xff0c;无论我们多么小心地使用 Mac&#xff0c;多么有条理地存储重要文件&#xff0c;我们仍然有可能丢失 Mac 上的数据。某些硬件故障更有可能导致您意外丢失文件。除此之外&#xff0…

Camtasia2024中文版最新电脑录屏剪辑神器!

大家好&#xff0c;今天我要安利一个我最近超级喜欢的工具——Camtasia2024中文版&#xff01;这款软件真的太棒了&#xff0c;它让我的视频编辑工作变得更加轻松和高效。如果你也对视频制作感兴趣&#xff0c;那么一定要尝试一下这款神器哦&#xff01; Camtasia2024win-正式…

Android基于MediaBroswerService的App实现概述

mSession.setPlaybackState(mStateBuilder.build()); // 5. 关联 SessionToken setSessionToken(mSession.getSessionToken()); } } 根据包名做权限判断之后&#xff0c;返回根路径 Override public BrowserRoot onGetRoot(String clientPackageName, int clientUid, Bundl…

论文解读:Pandora: 朝着结合自然语言动作与视频状态的通用世界模型发展

论文《Pandora: 朝着结合自然语言动作与视频状态的通用世界模型发展》探索了构建一个高度集成的AI系统&#xff0c;旨在理解自然语言指令并在视频所代表的视觉环境中执行相应操作&#xff0c;从而推进对复杂动态场景的建模与预测能力。以下是该论文的关键点和贡献的详细解读&am…

无法打开微软商店

今天给大家讲一下我在使用win11系统时遇到的一些问题&#xff0c;希望对出现类似情况的人有所帮助。 首先就是微软商店打不开的问题。相信许多windows系统的用户都会碰到此问题。我在打开时会出 现一直转圈的界面&#xff0c;在网上找了一些方法&#xff0c;但都没什么用处。…

小阿轩yx-MySQL数据库初体验

小阿轩yx-MySQL数据库初体验 数据库简介 21 世纪迈入了“信息爆炸时代”&#xff0c;大量的数据、信息在不断产生&#xff0c;伴随而来的就是如何安全、有效地存储、检索和管理它们。 对数据的有效存储、高效访问、方便共享和安全控制已经成为信息时代亟待解决的问题。 使用…