kettle插件-oracle cdc插件,过五关斩六将终于搞定oracle实时数据同步

自我介绍:

大家好!我是Java小金刚,在互联网金融行业打拼了10年的老兵。如果你对Java编程、互联网金融、大数据以及软件开发领域感兴趣,那么快来关注我公众号【Java小金刚】,让我带你领略最新最炙手可热的技术动态和经验分享。

 场景:

群里时不时会有小伙伴询问Oracle cdc的相关问题,我本人也折腾过,当时由于本地缺乏Oracle环境,笔记本电脑跑个Oracle直接就歇菜了。尘封十年的台式机重出江湖,是时候给一个交代了。

在处理oracle cdc的过程中遇到了各种问题,有机器问题,有权限问题,有debezium配置问题等各种问题,好在最后披荆斩棘,过五关斩六将,今天将整个过程梳理下分享给大家。

30c984c3-f4d4-4c8a-b93b-02f14f758c67

 

1、Oracle环境安装

Oracle安装可以使用dokcer进行安装,我本次验证是使用docker安装的Oracle 11g,测试过程中11g,12c都可以正常接收到cdc数据。具体安装步骤略。

安装之后配置两个用户 test和kminer,test用户用来操作数据。kminer用户用来接收cdc数据。

2、Oracle配置

1)Oracle需要开启归档日志。

2)Oracle需要开启附加日志。

3)Oracle需要设置相关权限。

4)以上设置最好找DBA解决。

3、Debezium 设置

Debezium 是一个开源的分布式平台,用于捕获数据库的变更数据(Change Data Capture,CDC)。它可以监控数据库的变化,并以事件流的形式将这些变更提供给其他系统进行处理,在数据集成、数据同步、实时分析等场景中发挥着重要作用。

kettle插件也正是基于Debezium进行封装研发的。

4、安装插件和驱动

1)将自研插件oracle-cdc-1.0.zip放到kettle的plugins目录下面。

2)将Oracle驱动包ojdbc8-21.7.0.0.jar放到kettle的lib目录下面。

3)重启Spoon客户端。

 

6、创建T1 表

使用test用户创建T1表,注意表名最好大写。脚本如下:

CREATE TABLE T1 ( id NUMBER, name VARCHAR2(100), dt TIMESTAMP );

7、设计转换

1)Oracle CDC ,监听Oracle日志变更,捕获数据

2)Json input,解析Oracle变更数据

3)Swtich/case,根据op字段进行路由

4)日志步骤,打印接收到的数据

1a334ad2-8573-4998-80f3-ded82bc87127

5)Oracle CDC 配置

更多属性配置参考Debezium官网

企业微信截图_17568865512591

 

8、调试

1)T1表中插入数据,脚本如下:

INSERT INTO T1 (id, name, dt)
VALUES (2, 'Java小金刚', SYSTIMESTAMP);

 

789a026e-27fa-4c9c-8092-70db88242c8e

 

2)kettle中可以正常接收到插入数据,数据结构如下所示:

 

 {"ts_ms":1756853845000,"db":"HELOWIN","table":"T1","op":"CREATE","after":"{\"ID\":\"2\",\"NAME\":\"Java小金刚\",\"DT\":1756853844788426}","pk":"{}"}

 

3)更新数据,脚本如下:

update T1 set name='无敌小金刚' where id=2;

 

9bdfc8c5-331f-4f58-8be3-57cdd1ad0246

 4)kettle中可以正常接收到更新数据,数据结构如下所示:

 {"ts_ms":1756854217000,"db":"HELOWIN","table":"T1","op":"UPDATE","before":"{\"ID\":\"2\",\"NAME\":\"Java小金刚\",\"DT\":1756853844788426}","after":"{\"ID\":\"2\",\"NAME\":\"无敌小金刚\",\"DT\":1756853844788426}","pk":"{}"}

 

5)删除数据,脚本如下:

delete from  T1  where id=2;

 

1aeaacaf-508d-4bdd-a113-a5d3cec2e42c

 6)kettle中可以正常接收到删除数据,数据结构如下所示:

{"ts_ms":1756854487000,"db":"HELOWIN","table":"T1","op":"DELETE","before":"{\"ID\":\"2\",\"NAME\":\"无敌小金刚\",\"DT\":1756853844788426}","pk":"{}"}

 

image

 

posted @ 2025-09-03 19:56  慕容尘轩  阅读(59)  评论(0)    收藏  举报