开发者社区> 问答> 正文

CanalServer 是否存在性能瓶颈

canal上部署了51个实例,client(消费所有的实例)与canal部署在同一台服务器上,并且服务器上无其他服务。

client实现 初始化连接

    // 根据ip,直接创建链接,无HA的功能
    CanalConnector connector = CanalConnectors.newSingleConnector(
            new InetSocketAddress(hostIp, port), destination.generateDestination(), "", "");

获取数据

                long t1 = System.currentTimeMillis();
                Message message = connector.getWithoutAck(10240, 1000L, TimeUnit.MILLISECONDS);   //以毫秒为单位
                long t2 = System.currentTimeMillis();
                long batchId = message.getId();
                logger.info("read batchId=[{}], time=[{}]ms", batchId, (t2 -t1));

问题

发现部分实例执行getWithoutAck方法的耗时大于设置值(1000ms),大概在2000ms,数据量大时耗时也随之放大。

下面是client一次请求的分析:

client发送请求(t1) server收到请求(t2) embeddedServer.getWithoutAck()完成,并向client返回数据(t3=10:40:34) client收到数据(t4=10:40:37) 根据日志可知,t4-t1=5000ms,而t4-t3=3000ms,而getWithoutAck耗时为1000ms,因此可以推断出t2-t1=5000-3000-1000=1000ms。

因此,是否可以说明client与CanalServer之间的通信存在耗时?但是这个耗时在一般情况下是忽略不计的!

如果是CanalServer 的性能瓶颈,能否优化? 服务器24核,内存64g

原提问者GitHub用户GitHub-BruceTong

展开
收起
绿子直子 2023-05-09 16:00:17 135 0
1 条回答
写回答
取消 提交回答
  • 优先看下canal server的jvm内存和GC状态.

    a. 一次性取10MB的数据不是一种明智的做法

    b. 一个server部署过多的binlog解析队列,也不明智,需要平衡jvm内存和业务'

    一般我们内部使用,8个队列,4M+100ms的获取

    原回答者GitHub用户agapple

    2023-05-10 11:02:12
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载