开发者社区 问答 正文

GroupEventSink当filterTransactionEntry为true时存在bug

环境信息

canal version 1.1.3 mysql version 所有

问题描述

if (filterTransactionEntry) { return super.doSink(Arrays.asList(event)); } 如上代码不应该return,否则就丢数据了

原提问者GitHub用户lulu2panpan

展开
收起
古拉古拉 2023-05-08 14:50:35 91 分享 版权
2 条回答
写回答
取消 提交回答
  • 已修复

    原回答者GitHub用户agapple

    2023-05-09 18:00:21
    赞同 展开评论
  • 随心分享,欢迎友善交流讨论:)

    你的猜测是正确的,当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处理,而不会直接返回。

    2023-05-08 15:20:33
    赞同 展开评论