环境信息
canal version 1.1.3 mysql version 所有
问题描述
if (filterTransactionEntry) { return super.doSink(Arrays.asList(event)); } 如上代码不应该return,否则就丢数据了
原提问者GitHub用户lulu2panpan
你的猜测是正确的,当filterTransactionEntry为true时,GroupEventSink的doSink方法应该将event交给后续的processor处理,而不是直接返回。GroupEventSink主要用于将多个Canal instance的event合并成一个队列,然后交给下游的processor处理。因此,如果直接返回,就会丢掉一些event,导致数据不完整。你可以将上述代码改成如下形式:
if (filterTransactionEntry) { super.doSink(Arrays.asList(event)); return null; } else { return super.doSink(Arrays.asList(event)); } 这样,当filterTransactionEntry为true时,event会被传递给后续的processor处理,而不会直接返回。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。