开发者社区> 问答> 正文

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 80 0
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
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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