Flink CDC支持Oracle RAC架构CDB+PDB模式的实时数据同步吗,可以上生产环境吗

众所周知,Flink CDC是一个流数据集成工具,支持多种数据源的实时数据同步,包括大家所熟知的MySQL,MongoDB等。原本是作为Flink的子项目运行,后来捐献给Apache基金会,底层实现比较依赖于Flink生态。具体到数据同步底层实现则相对比较依赖于Debezium。

对于Oracle实时数据同步有需求的用户来说,经常会有疑问,比如Flink CDC支持Oracle实时数据同步吗,可以应用到生产环境吗?这些问题也经常且反复的在Flink CDC社区群被来自各个不同行业的用户所咨询。

本文将以实际的实践经验解答这些问题,"避免入坑"。但同时也提供Oracle端的完整配置供读者朋友们测试使用,欢迎留言区探讨~

  1. Flink CDC支持Oracle实时数据同步吗?

支持,但有限。

Flink CDC在Oracle实时数据同步的实现上依赖于Debezium,目前依赖的版本是1.9.8.Final(比较老的版本,现在Debezium最新版本已经3.x了)。Debezium底层对Oracle的支持有2种模式,Logminer(默认模式)和Xstream。Flink CDC官方对Oracle的默认支持模式也是Logminer,也是用的比较多的一种。

Logminer是Oracle推出的一个开源工具,原本初衷是帮助DBA来排查数据库问题的,现在很多非Oracle官方推出的基于日志解析的Oracle CDC实时同步工具基本都是基于Logminer做的封装,存在各种问题。比如同步效率很低,尤其是当存量数据非常大的时候,开启initial模式(全量/存量+增量),仅同步存量数据都会消耗很多时间,甚至有时候会出现snapshot too old错误导致同步任务挂掉,只能重新同步。并且目前只支持Oracle主库同步。

  1. 可以在生产环境中应用Flink CDC来完成Oracle的实时数据同步吗?

强烈不建议、强烈不建议、强烈不建议,重要的事情说三遍!!!

Oracle作为一个闭源工具,官方推出了一个商业化产品来完成对Oracle实时数据同步的支持,叫Oracle Golden Gate,简称OGG。这是对Oracle实时数据同步实现首推工具,同步效率、稳定性、健壮性都远远高于各种基于Logminer做二次封装的工具。即使是Flink CDC社区维护人员,在Oracle实时数据同步的工具上,也是首推OGG,不建议使用Flink CDC更不建议上生产。有兴趣的读者可以在Flink CDC社区钉钉群搜索关键字Oracle查看社区用户的讨论。

可能到了这里,仍然有一部分用户想说,我就是想用Flink CDC来解决Oracle实时数据同步的问题,毕竟是免费的,OGG那么贵,用不起。

那么接下来作为在Flink CDC Oracle踩过坑的用户之一,分享下Flink CDC对Oracle RAC架构CDB+PDB模式的实时数据同步之Oracle端怎么配置。(PS: Flink CDC官方在Oracle Connector CDC文档的配置中存在诸多问题,且对于Oracle 19c,CDB + PDB不支持Incremental Snapshot模式)

1. 依赖的版本和部署模式:

  • Flink 1.18
  • Flink CDC 3.2.1/2.4.2(PS: Flink CDC
    3.X版本及之后对Oracle的支持几乎没有迭代更新)
  • Debezium 1.9.8.Final
  • Oracle 19c, RAC/单机,CDB + PDB模式

2. 创建Oracle用户和赋权

复制代码
1. 创建一个COMMON用户
CREATE USER "PPC#FLINKCDCAPP"
IDENTIFIED BY "******"
DEFAULT TABLESPACE ZHGC
TEMPORARY TABLESPACE TEMP_ZHGC
CONTAINER=ALL;

2. 用户PPC#FLINKCDCAPP赋权
GRANT CREATE SESSION TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SET CONTAINER TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT FLASHBACK ANY TABLE TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ANY TABLE TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT_CATALOG_ROLE TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT EXECUTE_CATALOG_ROLE TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ANY TRANSACTION TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT LOGMINING TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT ANALYZE ANY TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT CREATE TABLE TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT LOCK ANY TABLE TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT ALTER ANY TABLE TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT CREATE SEQUENCE TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT EXECUTE ON DBMS_LOGMNR TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT EXECUTE ON DBMS_LOGMNR_D TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ON V_$DATABASE TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ON V_$LOG TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ON V_$LOG_HISTORY TO PPC#FLINKCDCAPP CONTAINER=ALL; 
GRANT SELECT ON V_$LOGMNR_LOGS TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ON V_$LOGMNR_PARAMETERS TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ON V_$LOGFILE TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ON V_$ARCHIVED_LOG TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ON V_$TRANSACTION TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ON GV_$TRANSACTION TO PPC#FLINKCDCAPP CONTAINER=ALL;
GRANT SELECT ON SYS.LOGMINER_DICT_CACHE TO PPC#FLINKCDCAPP CONTAINER=ALL;

阅读原文获取更多信息

https://mp.weixin.qq.com/s/GSbsBLS8aOXWqNsq6hny7g

相关推荐
pengdott8 小时前
Oracle RAC内存融合技术深度解析:集群性能的幕后引擎
数据库·oracle
我科绝伦(Huanhuan Zhou)10 小时前
脚本再升级,兼容Oracle 26ai一键安装
数据库·oracle
极客数模10 小时前
【2026美赛赛题初步翻译F题】2026_ICM_Problem_F
大数据·c语言·python·数学建模·matlab
编程彩机13 小时前
互联网大厂Java面试:从分布式架构到大数据场景解析
java·大数据·微服务·spark·kafka·分布式事务·分布式架构
vx-bot55566613 小时前
企业微信接口在多租户SaaS平台中的集成架构与数据隔离实践
大数据·架构·企业微信
码云数智-大飞15 小时前
Oracle RAS:AI时代守护企业数据安全的智能盾牌
数据库·人工智能·oracle
bubuly15 小时前
软件开发全流程注意事项:从需求到运维的全方位指南
大数据·运维·数据库
xixixi7777717 小时前
基于零信任架构的通信
大数据·人工智能·架构·零信任·通信·个人隐私
Hello.Reader18 小时前
Flink 自适应批执行(Adaptive Batch Execution)让 Batch 作业“边跑边优化”
大数据·flink·batch