com.alibaba.otter.canal.client.CanalConnector.get 方法中有 batchSize 参数。当我设置成 100 时,假如我在处理某些 entry 出错,然后调用 connector.rollback(batchId),这就会导致此次的所有 entry 回滚吗?那是否会导致接下来出现重复处理相同 entry 的问题 ?
我想问下 canal 有提供 "ack 提交某个 Message Entry" 的方案吗?
我现在的思路是在记录 "库名+表名+主键" 做唯一判断,防止 rollback 后重复处理
原提问者GitHub用户idreamshen
Canal没有提供直接针对单个Entry进行ack提交的方案,可以考虑在处理过程中记录已经处理过的Entry,以避免重复处理的情况。在回滚操作时,确实会将该batchId之后的所有Entry都回滚,但在下一次拉取到该batchId之前的数据时,Canal会重新发送。因此,需要在处理过程中进行幂等性判断,避免重复处理已经处理过的Entry。记录"库名+表名+主键"做唯一判断是一种可行的方案。
没有单条ack的功能,get的时候设置batchSize小一点. ps. 主要是性能考虑
原回答者GitHub用户agapple
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。