『MySQL』Maxwell和Canal的选型和规划
这是学习笔记的第 2190篇文章
读完需要
分钟
速读仅需7分钟
关于Maxwell和Canal的选型和规划 , 之前在团队内部也讨论过几次 , 从功能和长期的支持 , 定制方面 , 似乎哪个方面都不是很好比较 , 毕竟根据每个企业的特点 , 都有难以取舍的痛 。
一般说要比较 , 基本都会拿出这幅图来(数据带有主观特点 , 仅供参考)
本文插图
我们在这个基础上做些补充 。
首先对于这个工具的定位 , 我们如果是主要基于数据流转来作为虚拟从库这样一个组件 , 其实选择Maxwell和Canal的差别会比较明显 。
Maxwell的定位基本上一句话就能说清楚 , MySQL+Kafka , 如果是基于MySQL和Kafka组合的技术栈 , Maxwell无疑是一种可直接上手的工具 , 基本不需要复杂的配置即可跑通一个demo,快速开始测试,换句话说Maxwell部署很简单 , 上手简单 , 跑通一个完整的测试全然没有问题 , 对于缺乏基础建设 , 短时间内需要快速迭代的项目和公司比较合适 。
Canal的部署相对来说要复杂许多 , 对于开发侧的要求较高 , 有两个值得一提的参考点 , 一个是bootstrap,对于数据初始化来说 , 这是一个缺失 , 和Canal这个工具本身的定位有关 , 第二个是数据落地 , 得自己写客户端 , 当然除此之外 , 在服务高可用 , 文档 , 数据分区 , 自带图形管理工具方面 , Canal确实有自身的优势 , 而且据说产品内部版本已经对接了商业数据库侧 。 对于大中型的项目 , 具有团队开发优势的项目和公司来说 , 可以考虑 , 或者可以作为自造轮子的参考 。
这几天看了下两个开源项目相关的代码 , 有了更进一层的认识 。 GitHub的流行度是一个风向标 ,
本文插图
【『MySQL』Maxwell和Canal的选型和规划】
本文插图
从这个流行度来看 , 两个项目的量级确实差别挺大 , 一方面阿里有自身的开源号召力 , Maxwell在这个数据面前略显逊色 。
不过从代码层面来看 , 逐步理解了这个差异 , 首先关于MySQL协议的Java实现 , 这个整个工具的核心部分 , 在Canal中都是自下而上都实现了 , 而Maxwell中翻了一圈代码 , 竟然没有 , 发现是在另外一个开源项目mysql-binlog-connector-java中 , 这个项目的协议实现很精巧 , 对于理解协议层的一些细节很有帮助 。
本文插图
当然从更细一层来说 , Canal是模拟MySQL Slave , 主动从Master端拉取日志数据 。 而mysql-binlog-connector是一个解析库 , 它有两种模式:BinaryLogFileReader日志读取模式 , 和BinaryLogClient客户端访问模式 , 在实现方式上更加灵活 , 而且BinaryLogFileReader这个部分的实现算是一个杀手级特性 , 如果规划了binlog集市 , 在这个基础之上简直如虎添翼 。
Maxwell还有什么细节 , 它基于C3P0连接池 , 所以在Slave端会看到有几个复制相关的会话 , 在测试框架部分采用了TestNG的开源项目 , 在数据落地部分 , 支持的目标端非常丰富 , Redis , Kafka , Kinesis , 在数据接入层面的功能非常完善 , 目前看没有后端的功能支持 。
Canal的实现是前后端组合 , 还包含一个子项目是平台化管理入口 , 它对接的后端更多是基于自身的技术栈体系 , 把整个链路能够打通 。
推荐阅读
- 揭秘MySQL生态重要功能,X-Engine引擎核心能力——OnlineDDL
- #JAVA破局之路#分布式事务解决方案),分布式事务详解(mysql事务如何实现的
- [占地为王数码会]Canalys发布Q1手机市场报告,三星、华为均下降17%,小米逆势增长
- 『E网走天下』Canalys数据:2020年Q1季度小米唯二正增长,幅度第一!
- 『天极网』Canalys数据报告出炉:2020年第一季度的全球智能手机出货量同比下降13%
- 「小米科技」Canalys: 2020年Q1小米全球手机出货量增长9%,增幅第一
- 『埃尔法哥哥』从 MySQL 架构设计出发,看它是如何执行一条 SQL 语句的?
- 「湖州」阿里p8必会知识点:微服务+Tomcat+NGINX+MySQL+Redis
- 「手机中国」Mac出货量下降,Canalys发布2020第一季度PC市场数据
- 小雨滴和科技▲Canalys:2020年Q1全球PC需求飙升
