kettle插件-oracle cdc插件,过五关斩六将终于搞定oracle实时数据同步
自我介绍:
大家好!我是Java小金刚,在互联网金融行业打拼了10年的老兵。如果你对Java编程、互联网金融、大数据以及软件开发领域感兴趣,那么快来关注我公众号【Java小金刚】,让我带你领略最新最炙手可热的技术动态和经验分享。
场景:
群里时不时会有小伙伴询问Oracle cdc的相关问题,我本人也折腾过,当时由于本地缺乏Oracle环境,笔记本电脑跑个Oracle直接就歇菜了。尘封十年的台式机重出江湖,是时候给一个交代了。
在处理oracle cdc的过程中遇到了各种问题,有机器问题,有权限问题,有debezium配置问题等各种问题,好在最后披荆斩棘,过五关斩六将,今天将整个过程梳理下分享给大家。

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)日志步骤,打印接收到的数据

5)Oracle CDC 配置
更多属性配置参考Debezium官网

8、调试
1)T1表中插入数据,脚本如下:
INSERT INTO T1 (id, name, dt) VALUES (2, 'Java小金刚', SYSTIMESTAMP);

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;

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;

6)kettle中可以正常接收到删除数据,数据结构如下所示:
{"ts_ms":1756854487000,"db":"HELOWIN","table":"T1","op":"DELETE","before":"{\"ID\":\"2\",\"NAME\":\"无敌小金刚\",\"DT\":1756853844788426}","pk":"{}"}

浙公网安备 33010602011771号