前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Maxwell和Canal的选型和规划

Maxwell和Canal的选型和规划

作者头像
jeanron100
发布2020-05-19 21:01:11
2.8K0
发布2020-05-19 21:01:11
举报

关于Maxwell和Canal的选型和规划,之前在团队内部也讨论过几次,从功能和长期的支持,定制方面,似乎哪个方面都不是很好比较,毕竟根据每个企业的特点,都有难以取舍的痛。

一般说要比较,基本都会拿出这幅图来(数据带有主观特点,仅供参考)

我们在这个基础上做些补充。

首先对于这个工具的定位,我们如果是主要基于数据流转来作为虚拟从库这样一个组件,其实选择Maxwell和Canal的差别会比较明显。

Maxwell的定位基本上一句话就能说清楚,MySQL+Kafka,如果是基于MySQL和Kafka组合的技术栈,Maxwell无疑是一种可直接上手的工具,基本不需要复杂的配置即可跑通一个demo,快速开始测试,换句话说Maxwell部署很简单,上手简单,跑通一个完整的测试全然没有问题,对于缺乏基础建设,短时间内需要快速迭代的项目和公司比较合适。

Canal的部署相对来说要复杂许多,对于开发侧的要求较高,有两个值得一提的参考点,一个是bootstrap,对于数据初始化来说,这是一个缺失,和Canal这个工具本身的定位有关,第二个是数据落地,得自己写客户端,当然除此之外,在服务高可用,文档,数据分区,自带图形管理工具方面,Canal确实有自身的优势,而且据说产品内部版本已经对接了商业数据库侧。对于大中型的项目,具有团队开发优势的项目和公司来说,可以考虑,或者可以作为自造轮子的参考。

这几天看了下两个开源项目相关的代码,有了更进一层的认识。GitHub的流行度是一个风向标,

从这个流行度来看,两个项目的量级确实差别挺大,一方面阿里有自身的开源号召力,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的实现是前后端组合,还包含一个子项目是平台化管理入口,它对接的后端更多是基于自身的技术栈体系,把整个链路能够打通。

对于我们当前的状态来说,我觉得接入Maxwell能够跑通整个数据链路,而且至少在Virtual Slave这一个技术栈上面来说,它是相对技术独立,可以做一些相关的定制工作的,从绝大多数公司的情况来说也是如此,毕竟数据库到大数据的数据流建设相对是隔离的,彼此上下游的建设能够互相映衬,如果目标足够统一,集中优势,选择Canal才是一种长期的策略。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档