canal 组件介绍(1)

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 前言    首先,这个文章系列主要是讲canal的,毫无疑问,对吧。那么在开始阅读这个系列之前,我希望真正有兴趣的同学一定要先去阅读canal的官方文档,没有什么比这个更权威了。

前言

    首先,这个文章系列主要是讲canal的,毫无疑问,对吧。那么在开始阅读这个系列之前,我希望真正有兴趣的同学一定要先去阅读canal的官方文档,没有什么比这个更权威了。这篇文章的内容其实也就是摘录自官网的一些文档。

    其次,本人对mysql的了解不是特别多,所以纯粹是介绍canal这个工具的大概功能,细节还需要各位各自去研究。

    最后,向我们公司的吴大神和庄大神致敬。


canal的工作原理

img_9975fbf846196b5c9ec2098a38a7e30d.png
canal工作原理

说明

    上面图片内容摘自canal的官方wiki,其实通过这个图我们明白了canal是通过模拟成master的slave来完成数据的同步的,其他后续需要考虑的问题就局限在Canal系统本身了。所以后面应该会针对Canal内部系统进行分析。


canal-server架构

img_b2da95151133e50f599361740582a11e.png
canal架构

说明

    Canal的Server端本身根据配置启动了很多个Instance对象,所谓的Instance对象就是模拟的数据库slave和master进行连接,换句话说就是假设canal同时成为N个数据库的slave,那么就会有N个Instance实例。

    每个Instance内部包含5个组件(图中只包含了4个,估计另外一个没有实现的原因),粉笔是eventParser、eventSink、eventStore、metaManager、alarmHandler。其中同步的数据流是按照eventParser->eventSink->eventStore进行传输的,当然eventStore是重点因为它存储了所有从mysql同步过来的数据(数据结构很有意思,后面会介绍),metaManager主要是和zookeeper打交道的,用于记录位点的元信息。


canal数据流

img_23fb5cead346f9abf57bdfd947ef65c7.png
组件数据流

说明

    Parser负责负责同步mysql的数据,sink负责进行数据处理并保存到store当中,这也是我刚才提交的数据流,也就说canal的instance里面的三个组件是按照上图进行数据流传输的。


EventStore设计

img_9741acdd58f657a3ee66951624bc1af7.png
EventStore设计

说明:

    EventStore采用内存环装的设计来保存消息,这里面的提交的Disruptor有兴趣可以去看下,这个东西号称无锁队列,性能杠杠的。

    EventStore的3个下标分别是put/get/ack,其中put代表同步写入数据的下标,get代表同步获取的数据的下标,ack代表确认数据的下标,这三者的关系是put>=get>=ack。


canal-server内部设计

img_e8fdd21a9349fd734c0abed557b8c5cc.png
Server

说明:

    canal-server内部其实包含两个server,其中按照server-client模式部署的场景下CanalServerWithNetty负责和client进行交互,CanalServerWithEmbeded负责给CanalServerWithNetty提供服务。

    当然我们公司某超大神也直接通过CanalServerWithEmbeded实现了一把独立部署的模式,我抽空会向他进行请教。


server-client交互设计


img_a5cbdd4b8fd2bf2ed82039a22948fc01.png
server-client交互

说明

    1、其实在非独立部署下,canal是以server端和client端存在的,server端主要负责同步mysql消息,client负责访问server端消费消息,当然中间会有一些高可用,这个后面到其他章节会有详细讲解。


canal整体架构

img_079b1ff344af619184a67c2d9a556d98.png
canal整体架构

说明

    一图胜千言,这个图详细的涵盖了canal的系统架构,consumer其实就是client端。


canal部署模式

img_15dacdee9c3871d8381f9145d80cf0e1.png
canal部署模式

说明

    这个图很好的诠释了canal的工作过程,放在最后算压轴吧,图来自互联网。


最后说说

    最后想说说为什么对canal比较感兴趣,首先这个东西在我们公司应用的比较多,其次我们公司的庄大神和吴大神分别采用两种模式在使用这个canal,每次当他们提起这个我就觉得无地自容,因为自己对这个东西一窍不通,然后就通过闲暇时间整理一些文章出来,加深自己的印象,当然这个最后也会有一个专栏叫做canal。


引用

谈谈对Canal( 增量数据订阅与消费 )的理解

canal github官网

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
canal 消息中间件 关系型数据库
系统重构数据同步利器之Canal实战篇
系统重构数据同步利器之Canal实战篇
1502 1
|
canal 关系型数据库 MySQL
Canal服务搭建
Canal服务搭建
1530 1
Canal服务搭建
|
5月前
|
canal 关系型数据库 MySQL
数据同步神器-Canal
Canal是阿里巴巴开源的MySQL增量日志解析工具,通过模拟MySQL主从复制机制,实时捕获数据库变更,实现数据同步至Kafka、Elasticsearch等系统,广泛应用于数据同步、监控、备份与迁移场景。
3402 5
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
2101 4
|
10月前
|
canal 关系型数据库 MySQL
MySQL 自动同步开源工具
本文介绍了几种开源工具用于实现 MySQL 数据库的自动同步。
|
canal 存储 NoSQL
mysql进阶:canal搭建主从|集群架构
之前我们讲解过canal的各种应用,但是对于生产环境来讲,服务高可用是必须保证的。因此canal单节点是不能满足我们的需求的。就需要搭建canal集群。
1751 2
mysql进阶:canal搭建主从|集群架构
|
canal 监控 关系型数据库
canal的特点是什么?如何使用?
【10月更文挑战第23天】canal的特点是什么?如何使用?
783 3
|
canal 监控 关系型数据库
Canal使用和安装总结
Canal使用和安装总结
1313 2
|
canal 消息中间件 监控
[从零单排canal 02] canal 集群版+admin控制台 最新搭建姿势(基于1.1.4版本)
[从零单排canal 02] canal 集群版+admin控制台 最新搭建姿势(基于1.1.4版本)
2348 0
[从零单排canal 02] canal 集群版+admin控制台 最新搭建姿势(基于1.1.4版本)