开发者社区 问答 正文

有一个问题关于canal Broken pipe异常的。

我在做canal机器的性能压测 一次大概修改了100万条mysql表的数据 ` Map<String, CanalDb> dbs = canalProperties.getDbs(); String prefix = getPrefix(dbs); log.info("prefix: {}", prefix); connector = CanalConnectors.newSingleConnector(new InetSocketAddress(canalProperties.getIp(), canalProperties.getPort()), canalProperties.getDestination(), canalProperties.getName(), canalProperties.getDestination()); connector.connect(); // connector.subscribe("..."); // connector.subscribe(".*.login_record,student_ocean"); // connector.subscribe("db_sys.login_record,db_support.student_ocean"); connector.subscribe(prefix); connector.rollback();

while (true) {
    int batchSize = 1000;

    try {
        Message message = connector.getWithoutAck(batchSize);
        long batchId = message.getId();

        try {
            if (batchId != -1 && message.getEntries().size() > 0) {
                List<CanalEntry.Entry> entries = message.getEntries();
                entries.forEach(this::publishEvent);
            }
            connector.ack(batchId);
        } catch (CanalClientException e) {
            log.error("doing sync err.", e);
            connector.rollback(batchId);
        }
    } catch (Exception e) {
        log.error("sync binlog err.", e);
    }`

这个是我的Canal config代码 在数据同步执行一段时间后我发现报了这个异常信息,观察canal server的日志没有任何异常信息

提问200.png

在服务器查看canalserver进程发现进程终止了,求帮助。。。canal版本是1.1.2

原提问者GitHub用户haijinqi

展开
收起
Java工程师 2023-05-03 15:56:42 121 分享 版权
1 条回答
写回答
取消 提交回答
  • 刚进行数据量调整发现这中config方式 数据量控制在25w以内是不会出现这个异常的。 调整了一下另一种方式 每300毫秒ack一次 目前压测到了 50w数据量

    原回答者GitHub用户haijinqi

    2023-05-04 17:02:42
    赞同 展开评论