Flink CDC里mysql cdc 3.0.1 canel job后有两个连接没释放有人遇到过吗,默认8小时wait-timeout,多次提交 canel后就把连接撑满了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用 Flink CDC 的 MySQL CDC 3.0.1 版本时,如果遇到 canel
(取消)作业后连接未释放的问题,可能是由于以下原因导致的:
MySQL 连接未正确关闭
在 Flink CDC 中,MySQL CDC Source 会通过 Binlog 或全量读取的方式与 MySQL 数据库建立连接。如果作业被取消(canel
),但连接未正确关闭,可能会导致连接泄漏。
MySQL 的 wait_timeout
参数
MySQL 默认的 wait_timeout
参数为 8 小时,表示空闲连接在 8 小时后会被自动关闭。如果频繁提交和取消作业,而连接未及时释放,可能会导致连接池被占满。
Flink CDC 的资源管理问题
如果 Flink 作业的 TaskManager 或 JobManager 资源未正确释放,可能会导致连接未被回收。这种情况通常与 Flink 的 Checkpoint、Failover 或者 Source 复用功能相关。
调整 wait_timeout
参数
将 MySQL 的 wait_timeout
参数设置为更小的值(例如 300 秒,即 5 分钟),以加快空闲连接的回收速度。可以通过以下命令修改:
SET GLOBAL wait_timeout = 300;
注意:此参数仅对新连接生效,已存在的连接不会受到影响。
检查 MySQL 的最大连接数
确保 MySQL 的 max_connections
参数足够大,以避免因连接数不足导致的问题。可以通过以下命令查看和修改:
SHOW VARIABLES LIKE 'max_connections';
SET GLOBAL max_connections = 500;
启用 Source 复用功能
如果作业中包含多张 MySQL 源表,建议开启 Source 复用功能,以减少 Binlog 连接数。可以通过以下 SQL 命令启用:
SET 'table.optimizer.source-merge.enabled' = 'true';
重要提示:开启 Source 复用后,需要无状态启动作业,否则可能导致拓扑不一致或数据丢失。
升级 Flink CDC 版本
如果当前使用的 MySQL CDC 版本为 3.0.1,建议升级到更高版本(如 3.0.2 或以上),以修复可能存在的连接泄漏问题。
监控 MySQL 连接状态
使用以下命令查看当前 MySQL 的连接情况,定位未释放的连接:
SHOW PROCESSLIST;
找到状态为 Sleep
且持续时间较长的连接,手动终止这些连接:
KILL CONNECTION <connection_id>;
重启 Flink 集群
如果问题无法通过上述方法解决,可以尝试重启 Flink 集群,强制释放所有未关闭的连接。
增加 TaskManager 内存
如果 TaskManager 内存不足,可能会导致连接未正确释放。可以在资源配置页面增加 TaskManager 的内存大小。
启用自动调优功能
开启 Flink 的 Autopilot 自动调优功能,动态调整并发度和资源分配,避免资源浪费。在作业运维页面将自动调优模式设置为 Active
。
避免频繁取消作业
频繁取消和重新提交作业可能会加剧连接泄漏问题。建议在开发和测试阶段尽量减少不必要的作业取消操作。
定期监控连接数
定期检查 MySQL 的连接数和 Flink 作业的资源使用情况,及时发现并解决问题。
使用最新版本的 Flink 和 MySQL CDC 连接器
新版本通常会修复已知的 Bug 和性能问题,建议始终使用最新的稳定版本。
通过调整 MySQL 的 wait_timeout
参数、启用 Flink 的 Source 复用功能、升级 MySQL CDC 版本以及手动清理残留连接,可以有效解决连接未释放的问题。同时,建议优化作业配置和监控机制,避免类似问题再次发生。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。