我们Flink CDC中oracle source 也是连接数很多,也不知道怎么搞?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Flink CDC连接Oracle数据源时,如果遇到连接数过多的问题,可以参考以下优化建议和配置调整方法来解决。以下是详细的解决方案:
连接数过多可能由以下原因导致: - 全量阶段并发过高:在全量读取阶段,Flink CDC会通过JDBC连接Oracle数据库,使用SELECT
语句读取全量数据。如果并发设置过高,可能会占用大量连接。 - 增量阶段Binlog连接过多:在增量读取阶段,Flink CDC通过Binlog Client连接Oracle数据库读取变更数据。当涉及的表数量较多时,可能导致连接数激增。
可以通过以下SQL查询Oracle的最大连接数限制:
SHOW PARAMETER SESSIONS;
SHOW PARAMETER PROCESSES;
确保当前连接数未超过最大限制。
WITH
参数中,设置合理的connectionMaxActive
值(连接池最大连接数)。例如:
'connectionMaxActive' = '5'
注意:此参数设置过大可能会导致服务端连接数异常,请根据实际需求调整。
Flink支持通过Source复用来减少Binlog连接数。具体操作如下: - 在SQL作业中开启Source复用功能:
SET 'table.optimizer.source-merge.enabled' = 'true';
重要提示: - 开启Source复用后,具有相同配置参数的MySQL或Oracle源表会进行合并。 - 对于已有作业,启用Source复用后需要无状态启动,因为作业拓扑会发生变化。
CREATE DATABASE AS
(CDAS)或CREATE TABLE AS
(CTAS)语法实现整库或多表同步。Flink会对Source进行优化,复用一个Source节点读取多张表的数据,从而减少连接数。 示例:
CREATE DATABASE target_db WITH ('connector' = 'oracle-cdc', ...);
INCLUDING TABLE
或EXCLUDING TABLE
来指定需要同步的表。例如:
INCLUDING TABLE 'web.*'
SESSIONS
和PROCESSES
参数。例如:
ALTER SYSTEM SET SESSIONS=500 SCOPE=SPFILE;
ALTER SYSTEM SET PROCESSES=500 SCOPE=SPFILE;
修改后需重启Oracle实例生效。
REPLICA IDENTITY
设置为FULL
,以便Flink CDC能够正确读取变更数据。通过以上方法,您可以有效减少Flink CDC连接Oracle数据源时的连接数问题。建议优先尝试降低并发度、启用Source复用以及优化SQL逻辑等方法。如果问题仍未解决,可以进一步调整Oracle数据库的配置或分批处理表。
如有其他疑问,请随时联系技术支持团队获取帮助!