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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 时隔一年,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修复和特性优化,还是非常值得升级的。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
存储 监控 NoSQL
MongoDB优化的几点原则
这篇文章讨论了MongoDB优化的一些原则,包括查询优化、热数据大小、文件系统选择、硬盘选择、查询方式优化、sharding key设计和性能监控。
97 1
|
canal 消息中间件 关系型数据库
系统重构数据同步利器之Canal实战篇
系统重构数据同步利器之Canal实战篇
717 1
|
canal 存储 数据可视化
一文详解 Canal Instance 设计理念与定制开发思路
一文详解 Canal Instance 设计理念与定制开发思路
一文详解 Canal Instance 设计理念与定制开发思路
|
4月前
|
关系型数据库 MySQL PHP
开发者必看:MySQL主从复制与Laravel读写分离的完美搭配
开发者必看:MySQL主从复制与Laravel读写分离的完美搭配
93 2
|
canal 消息中间件 关系型数据库
微服务轮子项目(36) -Canal数据库日志解析消费
微服务轮子项目(36) -Canal数据库日志解析消费
176 0
|
消息中间件 缓存 NoSQL
「CDC架构」捕获数据变化的瑞士军刀Debezium介绍
「CDC架构」捕获数据变化的瑞士军刀Debezium介绍
|
存储 SQL JSON
一文读懂 ClickHouse V22.8 新版本重要特性
ClickHouse 又双叒叕发布新版本了。
一文读懂 ClickHouse V22.8 新版本重要特性
|
存储 Oracle 安全
如何保证版本功能的空中加油?
如何保证版本功能的空中加油?
如何保证版本功能的空中加油?
|
canal Java 中间件
总结 canal 使用过程中的几个问题,值得思考一下
在给 canal 分配数据库权限的过程中,由于密码设置的比较简单,会报以下错误 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
256 0
|
NoSQL Redis 开发者
主从复制工作流程|学习笔记
快速学习主从复制工作流程

热门文章

最新文章