canal 组件介绍(1)

简介: 前言    首先,这个文章系列主要是讲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实战篇
1798 1
|
7月前
|
监控 安全 数据挖掘
好用的电商API接口推荐(技术员实操版)
作为技术员,“好用”的电商API核心标准是:合规稳定、接入便捷、响应高效、成本可控,无需冗余功能,能精准匹配业务场景、降低开发运维成本。以下按「核心场景」分类,推荐主流、靠谱的电商API接口,涵盖官方接口和优质第三方接口,附技术层面的核心优势,可直接对照选型、对接开发。
|
12月前
|
canal 关系型数据库 MySQL
数据同步神器-Canal
Canal是阿里巴巴开源的MySQL增量日志解析工具,通过模拟MySQL主从复制机制,实时捕获数据库变更,实现数据同步至Kafka、Elasticsearch等系统,广泛应用于数据同步、监控、备份与迁移场景。
8122 5
|
canal 缓存 关系型数据库
Spring Boot整合canal实现数据一致性解决方案解析-部署+实战
Spring Boot整合canal实现数据一致性解决方案解析-部署+实战
|
JSON API 数据安全/隐私保护
95%开发者不知道的调试黑科技:Apipost让WebSocket开发效率翻倍的秘密
在现代Web开发中,WebSocket提供全双工通信,适用于实时交互场景,如IM系统、聊天和客服系统。尽管调试工具众多,但文档设计一直是其短板。本文介绍如何使用Apipost实现WebSocket的高效调试与文档设计。Apipost不仅简化了连接建立、消息发送等调试操作,还通过分组功能优化了消息管理。其文档设计功能支持在同一endpoint下区分业务逻辑,生成清晰易维护的文档,并可一键分享。此外,文章还提供了WebSocket实战技巧,涵盖连接保持、消息格式选择、错误处理及安全性保障等内容,助力开发者提升开发效率。
|
自然语言处理 API Python
LLaMA
【9月更文挑战第26天】
832 63
|
前端开发 JavaScript UED
React 拖拽排序组件 Draggable List
在现代Web应用中,拖拽排序功能显著提升用户体验。使用React结合`react-dnd`库,可以轻松创建高效且易于维护的拖拽排序组件。通过简单的拖拽操作,用户能直观调整列表项顺序,适用于任务管理、看板工具等场景。实现步骤包括项目初始化、安装依赖、创建基础组件、添加拖拽功能及管理状态和事件。常见问题如拖拽效果不流畅、顺序未更新等可通过性能优化、正确处理索引交换等方式解决。移动端支持也需考虑,确保跨平台的良好体验。
1268 25
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
34036 8
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
JavaScript API 图形学
ThreeJS入门-创建一个正方体
这篇文章介绍了如何使用Three.js创建一个基本的正方体模型,并提供了实现这一功能的详细步骤和代码示例。
589 1
ThreeJS入门-创建一个正方体
|
存储 监控 Shell
docker的底层原理二:容器运行时环境
本文深入探讨了Docker容器运行时环境的关键技术,包括命名空间、控制组、联合文件系统、容器运行时以及分离的进程树,这些技术共同确保了容器的隔离性、资源控制和可移植性。
547 5

热门文章

最新文章