我在使用Flink CDC-2.3.0的时候,通过sql-client.sh提交sql任务,只能提交几个任务,一旦任务连接数据库超过一定的数量,再添加任务的时候就会报错,报connect-timeout的错误,3000ms超时了,换回2.2.1就没有这个问题,现在不明白问题在哪里,怀疑是2.3.0的连接池处理有问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您描述的问题,Flink CDC 2.3.0版本在通过sql-client.sh
提交SQL任务时,当连接的数据库数量超过一定限制后,会出现connect-timeout
错误(超时时间为3000ms)。而回退到2.2.1版本后问题消失。结合知识库中的相关资料,以下是可能的原因分析及解决方案:
Flink CDC在连接MySQL等数据库时,默认使用连接池来管理数据库连接。如果连接池大小(connection.pool.size
)不足以支持当前的任务并发量或数据库连接数,可能会导致连接超时。
connection.pool.size
的值为20。如果您的任务需要连接多个数据库实例,且每个任务都占用一定的连接池资源,可能导致连接池耗尽。connect-timeout
参数控制了连接数据库时的超时时间,默认值为3000ms(即3秒)。如果数据库响应较慢或网络延迟较高,可能会导致连接超时。
从2.2.1升级到2.3.0后,可能存在以下变化: - 连接池实现优化:2.3.0版本可能对连接池的实现进行了调整,导致在高并发场景下表现不如2.2.1稳定。 - 默认参数调整:某些默认参数(如connection.pool.size
或connect-timeout
)可能在2.3.0版本中被修改,导致性能下降。
增加connection.pool.size
的值以支持更多的并发连接。例如,将连接池大小设置为50或更高:
WITH (
'connector' = 'mysql-cdc',
'hostname' = 'your-mysql-host',
'port' = '3306',
'username' = 'your-username',
'password' = 'your-password',
'database-name' = 'your-database',
'table-name' = 'your-table',
'connection.pool.size' = '50'
)
注意:连接池大小应根据实际任务并发量和数据库实例数量进行合理配置,避免设置过大导致数据库压力过高。
将connect-timeout
参数从默认的3000ms增加到更高的值(如10000ms),以应对网络延迟或数据库响应较慢的情况:
WITH (
'connector' = 'mysql-cdc',
'hostname' = 'your-mysql-host',
'port' = '3306',
'username' = 'your-username',
'password' = 'your-password',
'database-name' = 'your-database',
'table-name' = 'your-table',
'connect-timeout' = '10s'
)
确保MySQL服务器的最大连接数(max_connections
)足够支持所有任务的并发连接。可以通过以下命令检查和调整:
SHOW VARIABLES LIKE 'max_connections';
SET GLOBAL max_connections = 500;
建议:将max_connections
设置为一个合理的值(如500),并确保数据库服务器有足够的资源处理这些连接。
AskTimeoutException
或Connection is not available
),以便进一步定位问题。通过调整connection.pool.size
和connect-timeout
参数,优化数据库连接池配置,并确保网络和资源充足,可以有效解决Flink CDC 2.3.0版本中出现的connect-timeout
问题。如果问题仍然存在,建议联系阿里云技术支持团队,提供详细的日志信息以协助排查。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。