運河1.1.6が1年後に正式にリリースされたというニュースをグループで見たばかりなので、急いで、どのような新機能が利用可能かを確認してください。
(リリースは6時間のみで、最前列が見守っていました)
1.運河とは
水路/パイプ/溝として翻訳された運河[kə'næl]は、主にMySQLデータベースに基づく増分ログ分析に使用され、増分データのサブスクリプションと消費を提供します。これは、Alibaba Cloud DTS(データ転送サービス)のオープンソースバージョンである必要があります。
詳細を知りたい場合は、githubにアクセスして、公式ドキュメント、または運河バージョン1.1.4に基づいて以前に作成した一連の紹介ドキュメントを参照してください。
2.重要な新機能
まだバージョン1.1.4を本番環境で使用しています。これはかなり安定しており、大きなバグはありません。
今回は、2つのバージョンのアップグレードを利用して、バージョン1.1.5および1.1.6の新機能をアップグレードして導入する価値があるかどうかを確認します。
2.1MQ送信の最適化
MQ送信のパフォーマンスの最適化に焦点を当てます。単一のトピックの最高ピーク値は、30,000〜80,000のrpsをサポートできます。これは、1桁のパフォーマンス向上に近いものです。
これは、1.1.5での重要な機能の最適化です。
なぜ運河をMQで使用する必要があり、MQの配信パフォーマンスの最適化に焦点を当てる必要があるのでしょうか。
主な理由は、canal+MQが強力な異種ストレージシステムを作成できることです。
canalがbinlogにサブスクライブした後、2つのモードがあります。1つはmysqlなどのメディアに直接配信する方法で、もう1つはMQに配信してから消費をカスタマイズする方法です。
MQへの配信モードが採用されている場合、メッセージのマルチターミナル消費にMQを使用できます(MySQLでのbinlogプルの繰り返しの影響を回避するため)。これは、セカンダリインデックスESの構築またはキャッシュRedisの構築に使用できます。等
一方、mqの配信後は、メッセージのバックトラッキングと監視のためのより良い方法を提供できます。
一般に、運河機能の最適化により、運河+MQモードがより強力にサポートされます。
2.2MQ送信機能のサポート
異なるトピックに対して異なる数のパーティションの設定をサポートするrabbitmQのMQ送信のサポートを追加しました#2173
rocketMQはタグ属性の定義を追加します#3438
パラメーター構成は環境環境変数をサポートします#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。
一晃两年过去了,没想到在1.1.5中已经修复了,手动点赞。
3.2 修复RDB同步下的关键字引起的同步报错
这是1.1.6中修复的bug。
对于这个bug,也是有点记忆犹新。
当时在莫干山度假,突然早上八点收到线上警报,发现数据同步出现异常。
好在随身带了电脑(程序员出远门必备,sigh~),经过排查后发现,就是一个表结构变更引入的关键字导致了同步异常。
過去を忘れる。。。
4.まとめ
ここでは、本番環境で重要ないくつかの最適化と修正について簡単に紹介します。詳細については、githubに直接アクセスしてリリースノートを参照してください。
一般に、1.1.5と1.1.6は多くのバグ修正と機能の最適化を行っており、それらはまだアップグレードする価値があります。
全部見てきましたが、オリジナリティは簡単ではありませんので、フォローして気に入ってください〜
ナレッジフラグメントを再編成し、Javaナレッジマップを作成します:github.com/saigu/JavaK…(過去の記事をチェックするのは非常に便利です)