爷青回,canal 1.1.6来了,几个重要特性和bug修复

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 时隔一年,canal 1.1.6正式release了,这里简单介绍了几个对我们生产中比较重要的优化和修复,具体更多内容大家可以直接去github上看release note。总的来说,1.1.5和1.1.6都做了非常多的bug修复和特性优化,还是非常值得升级的。

刚刚在群里看到消息说,时隔一年,canal 1.1.6正式release了,赶紧上去看看有什么新特性。

image.png

(居然才发布了6个小时,前排围观)

1、什么是canal

canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据 订阅 和 消费。应该是阿里云DTS(Data Transfer Service)的开源版本。

如果想了解更多,可以上github上看官方文档,或者我之前写过的系列基于canal 1.1.4版本的入门文档。

2、重要新特性

我们现在生产用的还是1.1.4版本,用得还算稳定,没有什么特别大的bug。

这次,趁着升级了两个版本,看看1.1.5和1.1.6版本有什么新特性可以值得升级引入。

2.1 MQ发送优化

重点优化MQ发送的性能,单topic最高峰值可支持3~8万的rps,接近数量级上的性能提升

这是1.1.5中的重要特性优化。

为什么canal需要搭配MQ使用,甚至重点优化MQ的投递性能呢?

主要原因是 canal + MQ 可以打造强大的异构存储体系。

image.png

canal订阅binlog后有两种模式,一种是直接投递到一种介质,如mysql,一种是投递到MQ然后自定义消费。

如果采用投递到MQ的模式,那么我们就可以利用MQ进行一份消息多端消费(避免重复拉取binlog对MySQL造成影响),用于构建二级索引ES或者构建缓存Redis等等。

另一方面,投递mq以后,对于消息的回溯、监控都能提供更好的途径。

总的来说,canal这个特性优化给 canal + MQ 的模式带来了更加强大的支持。

2.2 MQ发送特性支持

新增rabbitmQ的MQ发送支持 #2156
支持不同topic设置不同的分区数 #2173
rocketMQ新增tag属性的定义 #3438
参数配置支持env环境变量 #3450

这是1.1.5中的一个小优化,但是我觉得非常重要。

比如rocketMQ新增tag属性的定义。实际上在我们的测试环境,就非常需要这个特性。

我们使用rocketMQ的tag做路由,如果业务方自行生产和消费,可以完全根据tag进行路由区分。而从canal订阅的数据库变更,1.1.4版本无法直接给消息打tag,业务消费就无法通过tag进行路由。

现在这个特性的优化,正好可以解决这个问题。

2.3 新增Puslar MQ支持

这是1.1.6中的一个小优化,还是非常与时俱进的。

目前的云原生消息队列Puslar MQ,凭借存储和计算分离的架构在云原生体系下如日中天,而canal就在最新版本支持了对Puslar MQ的投递,手动点赞。

3、重要bug修复

3.1 修复gtid模式下位点持久不更新的问题

这是1.1.5中修复的bug。

GTID又叫全局事务ID(Global Transaction ID),是一个已提交事务的编号,并且是一个全局唯一的编号。MySQL5.6版本之后在主从复制类型上新增了GTID复制。

为什么要引入这个东西呢?

  • GTID使用master_auto_position=1代替了基于binlog和position号的主从复制搭建方式,更便于主从复制的搭建。
  • GTID可以知道事务在最开始是在哪个实例上提交的。
  • GTID方便实现主从之间的failover,再也不用不断地去找position和binlog 了。

为什么我特别关注到这个bug的修复呢?

因为我在2020年对canal 1.1.4进行poc的时候,就发现这个bug了,当时还吐槽了一波,233333。

image.png

一晃两年过去了,没想到在1.1.5中已经修复了,手动点赞。

3.2 修复RDB同步下的关键字引起的同步报错

这是1.1.6中修复的bug。

对于这个bug,也是有点记忆犹新。

当时在莫干山度假,突然早上八点收到线上警报,发现数据同步出现异常。

好在随身带了电脑(程序员出远门必备,sigh~),经过排查后发现,就是一个表结构变更引入的关键字导致了同步异常。

往事不堪回首。。。

4、总结

这里简单介绍了几个对我们生产中比较重要的优化和修复,具体更多内容大家可以直接去github上看release note。

总的来说,1.1.5和1.1.6都做了非常多的bug修复和特性优化,还是非常值得升级的。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
API Apache 数据库
Flink CDC 3.0 正式发布,详细解读新一代实时数据集成框架
Flink CDC 于 2023 年 12 月 7 日重磅推出了其全新的 3.0 版本 ~
110616 8
 Flink CDC 3.0 正式发布,详细解读新一代实时数据集成框架
|
存储 Java API
Elasticsearch 7.8.0从入门到精通
这篇文章详细介绍了Elasticsearch 7.8.0的安装、核心概念(如正排索引和倒排索引)、RESTful风格、各种索引和文档操作、条件查询、聚合查询以及在Spring Boot中整合Elasticsearch的步骤和示例。
781 1
Elasticsearch 7.8.0从入门到精通
|
Java Spring
SpringBoot接收参数的方式
本文介绍了Java Spring Boot中处理GET请求的多种方式。可以使用方法参数直接接收,或者通过`@RequestParam`注解指定必传参数。此外,可以用实体类接收多个相关参数,但不能同时使用`@RequestParam`。还可以通过`HttpServletRequest`对象获取参数,或利用`@PathVariable`接收路径变量。对于数组和集合参数,需注意使用`@RequestParam`注解。
1679 1
|
机器学习/深度学习 JSON 监控
国内最大的MCP中文社区来了,4000多个服务等你体验
国内最大的MCP中文社区MCPServers来了!平台汇聚4000多个服务资源,涵盖娱乐、监控、云平台等多个领域,为开发者提供一站式技术支持。不仅有丰富的中文学习资料,还有详细的实战教程,如一键接入MCP天气服务等。MCPServers专注模块稳定性和实用性,经过99.99% SLA认证,是高效开发的理想选择。立即访问mcpservers.cn,开启你的开发之旅!
14783 16
|
Ubuntu Linux 网络安全
Docker&Docker Compose安装(离线+在线)
Docker&Docker Compose安装(离线+在线)
24772 1
深入浅出阿里数据同步神器:Canal原理+配置+实战全网最全解析!
canal 翻译为管道,主要用途是基于 MySQL 数据库的增量日志 Binlog 解析,提供增量数据订阅和消费。 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
|
机器学习/深度学习 移动开发 前端开发
解密 SSE,像 ChatGPT 一样返回流式响应
解密 SSE,像 ChatGPT 一样返回流式响应
1367 1
|
应用服务中间件 nginx
Docsify——部署后显示404且无法访问README.md
Docsify——部署后显示404且无法访问README.md
371 0
|
SQL 关系型数据库 MySQL
binlog2sql的安装及使用
binlog2sql的安装及使用
493 2