开发者社区> 问答> 正文

Otter同步数据很慢

已经解决了这个问题,这个是出现在canal 1.0.25 (Otter 4.2.15) 上的。 主要的问题是 SocketChannel 类中 使用ByteBuf cache = PooledByteBufAllocator.DEFAULT.directBuffer(1024 * 1024); 作为数据buff,当新建连接且数据量比较大的时候,这个cache size 会急剧扩大,再配合 public void writeCache(ByteBuf buf) { synchronized (lock) { cache.discardReadBytes();// 回收内存 cache.writeBytes(buf); } } 方法中的 cache.discardReadBytes(); 使得系统在做无意义的memory copy 操作,使得一个工作核打满,并且writeCache速度极慢。

我们自己重写了 SocketChannel 内部的cache 实现,解决问题了。

看了Canal 的 1.0.26-preview-3的代码,这一块变动挺大,没有用过,不知道是否解决了问题。

原提问者GitHub用户Winwinter

展开
收起
古拉古拉 2023-06-16 21:08:12 64 0
2 条回答
写回答
取消 提交回答
  • 感谢您分享您的经验和解决方案。由于Otter同步数据慢可能有多个原因,这个原因的解决方法对于特定版本的Canal和Otter版本有效。

    如果其他用户经历相似的问题,可以尝试升级Canal或Otter版本,或者参考您提供的解决方案来进行优化。

    2023-06-18 08:06:15
    赞同 展开评论 打赏
  • canal 25不建议使用了, 直接上最新版

    原回答者GitHub用户agapple

    2023-06-16 21:50:03
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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