开发者社区 问答 正文

使用canal解析数据量较大的binlog时总是提前结束

环境信息

canal version 1.12 mysql version 5.7

问题描述

参照示例解析binlog日志, Message message ; while (running) { // 获取指定数量的数据,不确认 message = connector.getWithoutAck(batchSize);

            long batchId = message.getId();
            int size = message.getEntries().size();

            if (batchId == -1 || size == 0) {
                try {
                    Thread.sleep(waitingTime);
                } catch (InterruptedException e) {
                    logger.error("主线程等待时间超过"+waitingTime+":error"+e);
                }
                logger.info("type1:"+"batchId="+batchId+",size="+size);
                continue;
            }
            //读取到新的binlog信息后就放到集合中按event类型处理
            printEntry(message.getEntries());
        }

需要同步的数据量大概在22w条左右,总是读取了1w多条数据后进入 if (batchId == -1 || size == 0) 语句中,输出结果为batchId = -1,size = 0,可是此时的binlog并没有读取完,请问会是什么原因导致的呢

原提问者GitHub用户hucong-top

展开
收起
古拉古拉 2023-05-08 16:35:52 74 分享 版权
1 条回答
写回答
取消 提交回答
  • 【已解决】是代码方面的疏忽,在处理batchSize后没有去确认数量,即 connector.ack(batchId); // 提交确认 // connector.rollback(batchId); // 处理失败, 回滚数据

    导致单次获取的数据过大而且没有得到消费确认

    原回答者GitHub用户hucong-top

    2023-05-09 18:14:34
    赞同 展开评论