7、Canal-性能测试-组件性能测试

以前根据Canal在测试环境中测试其产品性能,其测试报告如下。根据Canal性能测试结果,感觉不是很理想。和官方的测试报告偏差很大。根据官方的建议,用其测试类测试其各个Canal模块的性能出测试报告如下。测试canal版本1.1.4。

一、测试环境

环境测试版本类型配置
官方环境疑是1.0.26MySQL AIntel® Xeon® CPU E5-2430 0 @ 2.20GHz (24core 96G) 日常业务库
MySQL BIntel® Xeon® CPU E5-2430 0 @ 2.20GHz (24core 96G)
Canal ServerIntel® Xeon® CPU E5-2430 0 @ 2.20GHz (24core 96G)
Canal ServerIntel® Xeon® CPU E5-2430 0 @ 2.20GHz (24core 96G)
本人环境1.1.4、1.1.5MacBookPro14,1Intel Core i5 数据库、Canal Server都在本机

二、测试过程及结果

2.1、本地测试环境准备

作者虽然给我们测试类了,但是这些类和方法如何传递参数?我们这些平时很少和binlog打交道的开发来说还是比较懵逼的。下面介绍如何用起来作者的测试类。这些测试类最重要的几个参数 binlogfilename(binlog名称)、binlogPosition(binlog位点)、slaveId(canal从机Id)。这些参数哪里获取?这是有逻辑意义的随便填写会报错,然后自己也比较懵逼。这些参数都是从mysql binlog中获取的,下面有获取的命令。

#获取binlog日志名称
show binary logs;
#打开binlog日志
show binlog events in 'mysql-bin.000001';
#查看binlog日志模式 row,statement,mixed
show global variables like '%binlog_format%';
#设置客户端超时防止拉取超时
SET @wait_timeout='999999999';

2.2、测试表结构

CREATE TABLE `table` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'xxx',
  `delivery_order_id` varchar(60) NOT NULL COMMENT 'xxx',
  `type` tinyint(4) NOT NULL COMMENT 'xxx',
  `ticket_id` bigint(20) NOT NULL COMMENT 'xxx',
  `price` decimal(10,2) NOT NULL COMMENT 'xxx',
  `quantity` int(11) NOT NULL COMMENT 'xxx',
  `amount` decimal(10,2) NOT NULL COMMENT 'xxx',
  `source` tinyint(4) NOT NULL COMMENT 'xxx',
  `status` tinyint(4) NOT NULL COMMENT 'xxx',
  `station_id` bigint(20) DEFAULT NULL COMMENT 'xxx',
  `emp_id` bigint(20) DEFAULT NULL COMMENT 'xxx',
  `delivery_start_time` datetime NOT NULL COMMENT 'xxx',
  `delivery_end_time` datetime NOT NULL COMMENT 'xxx',
  `complete_time` datetime DEFAULT NULL COMMENT 'xxx',
  `create_user` varchar(45) NOT NULL DEFAULT 'system' COMMENT 'xxx',
  `update_user` varchar(45) NOT NULL DEFAULT 'system' COMMENT 'xxx',
  `create_datetime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'xxx',
  `update_datetime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'xxx',
  `product_id` varchar(45) DEFAULT NULL COMMENT 'xxx',
  `product_name` varchar(255) DEFAULT NULL COMMENT 'xxx',
  `shop_id` int(11) DEFAULT NULL COMMENT 'xxx',
  PRIMARY KEY (`id`),
  KEY `idx_order_id` (`delivery_order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='xxx';

2.3、测试结果对比及环对比

测试模块版本测试人批量操作Insert/Update/Delete (导入业务)单条操作 (普通业务)
1.Binlog接收1.0.26官方200w TPS (网络 117MB/s)71w TPS (网络 112MB/s)
1.1.4本地环境源码报错无法测试未测试
1.1.5本地环境源码报错无法测试未测试
2.Binlog Event解析1.0.26官方200w TPS (网络 117MB/s)70w TPS (网络 110MB/s)
1.1.4本地环境62399–97943 TPS未测试
1.1.5本地环境69783 - 76219 TPS未测试
3.Insert/Update/Delete深度解析1.0.26官方200w TPS (网络 117MB/s)65w TPS (网络 105MB/s)
1.1.4本地环境163937 - 409860 TPS未测试
1.1.5本地环境170361 - 425565 TPS未测试
4.生成CanalEntry (存储到memory store)1.0.26官方130w TPS (网络 75MB/s)50w TPS (网络 90MB/s)
1.1.4本地环境1123 - 1539 TPS未测试
1.1.5本地环境1429 - 1616 TPS未测试
5.client接收1.0.26官方20w TPS 1.canal server机器网络 11MB/s2.canal client机器网络 75MB/s
binlog膨胀率为 1:6.810w TPS 1.canal server网络 22MB/s2.canal client网络 42MB/s
binlog膨胀率为 1:1.9
1.1.4本地环境未测试未测试
1.1.5本地环境未测试未测试

各个阶段测试代码:
1、FetcherPerformanceTest.java
2、MysqlBinlogEventPerformanceTest.java
3、MysqlBinlogParsePerformanceTest.java
4、MysqlBinlogDumpPerformanceTest.java
5、SimpleCanalClientPermanceTest.java

总结:

第4步生成CanalEntry (存储到memory store)面临性能问题,接下来要分析这个模块为什么有性能问题,是否有改进的空间或者通过升级版本方式改进的空间。性能测试issues提问

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值