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

相关推荐
嘉子的秃头日记5 小时前
TRO 2026|轮椅也能“猜到”用户想往哪走?
大数据·人工智能·机器学习
2601_957190905 小时前
极致裸眼沉浸!飞行影院重塑文旅游玩新体验
大数据·人工智能·旅游
阿乔外贸日记5 小时前
埃塞俄比亚出口全流程注意事项
大数据·人工智能·智能手机·云计算·汽车
中讯慧通6 小时前
无人机靠什么实时传画面?图传电台传输数据全明细
大数据·机器人·无人机
QYR_116 小时前
2032年全球料斗清洗机市场规模达14.67亿元:制药与食品行业驱动自动化清洗设备需求增长
大数据·市场调研
今日综合6 小时前
激光雷达的机器人市场竞争,谁在“吃透”六个场景?
大数据·机器人
KaMeidebaby7 小时前
卡梅德生物技术快报|噬菌体文库构建实验优化及偶联体系实验数据分析
大数据·人工智能·架构·spark·新浪微博
元Y亨H7 小时前
大数据转大模型(LLM)进阶学习路线图
大数据·llm
鸿乃江边鸟7 小时前
Spark中怎么做Spark canonicalize归一化
大数据·分布式·spark
未来之窗软件服务7 小时前
精选之变,顺势而生(2026 年高考语文作文)
大数据·人工智能·高考·仙盟创梦ide·东方仙盟