环境信息
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
【已解决】是代码方面的疏忽,在处理batchSize后没有去确认数量,即 connector.ack(batchId); // 提交确认 // connector.rollback(batchId); // 处理失败, 回滚数据
导致单次获取的数据过大而且没有得到消费确认
原回答者GitHub用户hucong-top