各位大佬是否遇到过flink1.15.3+cdc2.3.0同步oracle 连接数一直不释放的问题吗 请问大佬们怎么解决的?一直增长 知道连接数满
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用 Flink 1.15.3 和 CDC 2.3.0 同步 Oracle 数据时,如果遇到连接数一直不释放并持续增长的问题,可能是由于连接池配置不当、CDC 全量阶段的并发设置过高或未正确管理连接复用等原因导致的。以下是针对该问题的详细分析和解决方案:
在 CDC 的全量读取阶段,Flink 会为每个并发任务创建独立的数据库连接。如果并发度设置过高,可能会导致连接数迅速增加。
解决方法: - 降低作业并发度:检查当前作业的并发度设置,适当减少并发度以降低连接数压力。 - 优化 SQL 逻辑:如果可能,尝试使用 CREATE TABLE AS
(CDAS) 语法来复用连接,从而减少连接数。
连接池的大小直接影响到数据库连接数的使用情况。如果连接池配置过大,可能会占用大量连接资源。
解决方法: - 调整连接池大小: - 在 Hologres 或其他目标存储中,可以通过 connectionMaxActive
参数限制连接池的最大连接数。 - 如果作业中有多个表,建议为不同的表设置不同的 connectionPoolName
,避免连接池被过度占用。 sql -- 示例:为不同表设置不同的连接池名称 'connectionPoolName' = 'pool1'
- 共享连接池:从 VVR 8.0.4 版本开始,相同 endpoint
的表会默认共享连接池。如果您的版本支持此功能,请确保合理利用。
在多表同步场景下,开启 Source 复用可以显著减少 Binlog 连接数。
解决方法: - 在 SQL 作业中启用 Source 复用功能:
SET 'table.optimizer.source-merge.enabled' = 'true';
如果连接数持续增长且不释放,可能是由于连接未被正确关闭或存在连接泄漏。
解决方法: - 监控连接数:通过数据库的监控工具(如 MySQL 的 SHOW PROCESSLIST
或 Oracle 的 V$SESSION
)查看当前活跃连接数,确认是否存在连接泄漏。 - 调整超时时间:在连接器中设置合理的超时时间,例如 jdbcReadTimeoutMs
和 jdbcScanTimeoutSeconds
,确保长时间未使用的连接能够被自动释放。
某些连接数问题可能是由于已知的缺陷引起的。升级到更高版本的 Flink 和 CDC 可能会修复这些问题。
解决方法: - 升级到最新版本:根据知识库中的信息,Flink 和 CDC 的新版本修复了多个与连接数相关的缺陷,例如全量转增量读取时的数据丢失问题。 - 检查 Maven 仓库路径:如果使用的是 2.x 版本的 CDC,确保 group id 已从 com.alibaba.ververica
改为 com.ververica
。
Checkpoint 的间隔时间过长可能导致全量读取完成后延迟进入增量读取阶段,从而延长连接的占用时间。
解决方法: - 缩短 Checkpoint 间隔:将 execution.checkpointing.interval
设置为更短的时间(例如 10 秒),以加快全量到增量的切换。
execution.checkpointing.interval=10s
如果问题仍然存在,可以尝试使用社区版 CDC 连接器,确保其与当前 Flink 版本兼容。
解决方法: - 下载对应版本的社区版 CDC JAR 包,并上传到实时计算控制台。 - 在 SQL 作业中指定社区版 CDC 连接器作为 connector
参数。
remaining connection slots are reserved for non-replication superuser connections
错误。通过以上步骤,您可以有效解决 Flink 1.15.3 和 CDC 2.3.0 同步 Oracle 时连接数不释放的问题。如果问题仍未解决,建议进一步排查具体作业日志和数据库连接状态,定位潜在的异常点。