Flink CDC同步Oracle无主键表

Flink CDC同步Oracle无主键表

问题背景

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
### 配置 Flink CDCOracle 数据库读取变更数据并发送到 Kafka #### 使用 Debezium Connector 实现 Oracle 到 Kafka 的数据同步 为了实现这一目标,通常会采用 Apache Flink 结合Debezium 来捕获来自 Oracle 数据库的变化,并通过 Kafka 将这些变化流式传输出去[^1]。 #### 安装与配置 Debezium Oracle Connector 首先,在启动任何操作之前,确保已经安装好最新版本的 Confluent Platform 或者独立版 Kafka 和 Zookeeper。接着下载适合环境使用的 Debezium Connectors 版本。对于 Oracle 支持,则需特别注意获取官方支持或社区贡献的支持包[^2]。 #### 创建 Oracle 用户和结构准备 在源端即 Oracle 中创建专门用于CDC过程的新用户账号,并赋予其必要的权限以便能够访问所需模式下的对象以及执行逻辑日志挖掘(Log Miner)功能所需的特权。同时定义要被监听变更事件的目标格及其主键约束条件等元信息[^3]。 #### 启动 Oracle LogMiner 并设置归档日志模式 由于 Oracle CDC 基于 Redo 日志文件工作原理,因此需要开启数据库实例级别的归档日志记录选项(ARCHIVELOG),并且激活LogMiner工具来解析在线重做日志中的 DML/DDL 变更语句[^4]。 ```sql ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE SCOPE=BOTH; ``` 以上命令片段展示了如何增强补充日志级别以满足最小化需求的同时允许 GoldenGate 复制特性启用,这有助于提高增量更新捕捉效率[^5]。 #### 编写并提交 Debezium Source Connector JSON 文件给 Kafka Connect REST API 最后一步就是编写一个描述性的JSON文档作为参数传递给Kafka Connect服务进程,告知它关于即将建立连接的具体细节,比如JDBC URL字符串、用户名密码凭证以及其他一些可选属性如心跳间隔时间等等[^6]。 ```json { "name": "oracle-cdc-source", "config": { "connector.class": "io.debezium.connector.oracle.OracleConnector", "tasks.max": "1", "database.hostname": "<hostname>", "database.port": "1521", "database.user": "<username>", "database.password": "<password>", "database.server.name": "server1", "database.dbname": "<dbname>", "table.include.list": "SCHEMA_NAME\\.TABLE_NAME", "database.history.kafka.bootstrap.servers": "localhost:9092", "database.history.kafka.topic": "schema-changes.inventory" } } ``` 上述代码段提供了一个典型的 Debezium Oracle source connector 配置模板,其中包含了指向远程主机地址、认证凭据和其他重要设定项的信息[^7]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值