问题背景
Flink CDC是一种很强大且实用的实时数据同步工具,官网如下。
链接: link
但是在实际使用过程中还是会有些不足之处,比如说同步Oracle数据库中无主键以及唯一键的表时,关于目标端的幂等性时无法保证的。
问题解决
在Oracle数据库中,表中有一个伪列ROWID,而在CDC同步过来的数据中是不包含此列的。
修改源码如下,使之携带ROWID信息传入flink程序中,并且在目标端建表时将ROWID设置为主键。
下面展示一些 内联代码片
。
类 debezium-1.9.7.Final\debezium-connector-oracle\src\main\java\io\debezium\connector\oracle\SourceInfo.java
// 增加以下内容
public static final String ROW_ID = "px_rowid";
private String rowid;
public String getRowId() {
return rowid;
}
public void setRowid(String rowId) {
this.rowid = rowId;
}
```java
类 debezium-1.9.7.Final\debezium-connector-oracle\src\main\java\io\debezium\connector\oracle\OracleSourceInfoStructMaker.java
public OracleSourceInfoStructMaker(String connector, String version, CommonConnectorConfig connec