开发者社区> 问答> 正文

canal client 拿到的数据重复

cannal 客户端 拿数据 第一次拿是 batchId=1,size=1,msg=Message[id=1 exit 后第二次拿数据变成 batchId=2,size=2,msg=Message[id=2

而且第二次拿到的是 两条重复的数据 有一样的 logfileName: "mysql-bin.000012" logfileOffset: 3207300

重启canal server后,启动 canal客户端 又变成第一次拿数据,之后再拿数据都会重复,请问这个怎么解决,总不能每次调试都 重启canal server吧

CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("192.168.157.130", 11111), "example", "", ""); int batchSize = 10; int emptyCount = 0; try { connector.connect(); connector.subscribe(".\.."); connector.rollback(); int totalEmtryCount = 120; while (emptyCount < totalEmtryCount) { Message message = connector.getWithoutAck(batchSize); // 获取指定数量的数据 long batchId = message.getId(); int size = message.getEntries().size(); if (batchId == -1 || size == 0) { emptyCount++; System.out.println("empty count : " + emptyCount); try { Thread.sleep(1000); } catch (InterruptedException e) { } } else { emptyCount = 0; System.out.printf("message[batchId=%s,size=%s,msg=%s] \n", batchId, size, message.toString()); System.exit(0); printEntry(message.getEntries()); }

            connector.ack(batchId); // 提交确认
            // connector.rollback(batchId); // 处理失败, 回滚数据
        }

        System.out.println("empty too many times, exit");
    } finally {
        connector.disconnect();
    }

原提问者GitHub用户nothingsNeed

展开
收起
绿子直子 2023-05-09 11:58:26 97 0
1 条回答
写回答
取消 提交回答
  • 重复数据无法避免

    原回答者GitHub用户agapple

    2023-05-10 10:25:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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