Flink Oracle CDC data loss

        项目中有用到Flink Oracle CDC,下游系统反馈偶有发生data loss的问题,开始我们没有多想,一直误以为是我们后续处理流程导致,通过debezium提供increment snapshot功能修复丢失的数据。后来发现社区也有说到同样的问题,这这才开始紧张了~~

经排查,以及与网友讨论发现确实会存在下面两种情况会发生数据丢失:

1)save point 部分数据回滚,导致一部分数据丢失

2)logminer后事物数据提交,判断数据是否已提交逻辑问题(网友测试发现)

针对这2种情况具体分析如下:

一:savepoint 部分数据回滚,数据丢失。

1)执行sql如下:同一条记录更新多次,回滚了部分更新,预期的结果是字段REORDER_MULTIPLE=6, 7与8的更新都应该回滚。

2)对应log 日志数据如下:

每条记录的更新都会有一条记录,更新(6,7,8)三条记录,对应三条 ROLBACK=0的记录 ;

回滚了几条数据,也会有几条记录,回滚(7,8)两条记录,对应两条 ROLBACK=1的记录

回滚的记录的OPERATION_CODE是与要回滚的记录一样,这个例子是更新对应code是UPDATE(3), 则回滚的记录的code也是UPDATE(3)。

3) 回滚逻辑

回滚的记录的OPERATION_CODE是与要回滚的记录一样,这个例子是更新对应code是UPDATE(3), 则回滚的记录的code也是UPDATE(3)。

4)问题代码

io.debezium.connector.oracle.logminer.TransactionalBuffer 

同一条记录的更新(更新6,7,8)row_id都一样,6,7,8的更新事件都会被移除。不应该移除的更新数据6,也被移除了,导致数据丢失。

修改后代码

二:logminer后事物数据提交,判断数据是否已提交逻辑问题

io.debezium.connector.oracle.logminer.TransactionalBuffer

注释是这么写:

 

不同的日志事件的scn值是有可能一样的,如果两个commit的scn值一样,这就会导致第二个commit 会被过滤,导致第二个commit对应的变化数据丢失。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flink CDC Oracle是基于FlinkOracle Change Data Capture(CDC)功能,用于实时采集Oracle数据库的数据变更。它使用了debezium框架,并利用Oracle数据库自带的logminer技术来实现数据采集。 在配置Flink CDC Oracle时,需要注意的是,如果Oracle的dbName配置的是SID而不是service_name,可能会导致连接失败。解决这个问题的方法是将jdbc链接字符串改为jdbc:oracle:thin:@localhost:1521:sid的方式。你可以通过API方式或Flink SQL方式手动指定这个链接字符串,例如使用基于API的方式可以设置properties.put("database.url","jdbc:oracle:thin:@localhost:1521:sid")。 总结来说,Flink CDC Oracle是用于实时采集Oracle数据数据变更的工具,它基于Flink并使用debezium和Oracle的logminer技术实现。在配置时需要注意正确设置链接字符串,特别是当dbName配置为SID时。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [flink1.14.3 cdc jar包](https://download.csdn.net/download/weixin_46661903/84678566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Flink Oracle CDC Connector源码解读](https://blog.csdn.net/IT_xhf/article/details/130364090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值