Flink CDC里源mongo用mongo SQL CDC到mysql,slots配置 10-1000个都会耗尽,怎么回事?8C 32G机器,flink设置20G。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Flink CDC将MongoDB的数据通过Mongo SQL CDC同步到MySQL时,如果发现MongoDB的slots
配置(范围为10-1000)会被耗尽,这通常与MongoDB的变更流(Change Streams)机制以及Flink作业的并发配置和资源分配有关。以下是问题的详细分析和解决方案:
MongoDB Change Streams的工作机制
MongoDB的变更流(Change Streams)依赖于replica set
或sharded cluster
的oplog
来捕获数据变更。每个Flink CDC任务会为MongoDB创建一个或多个变更流连接,这些连接会占用MongoDB的slots
资源。
slots
资源被快速耗尽。Flink作业的并发配置
Flink CDC的并发度决定了从MongoDB读取变更流的任务数量。如果并发度过高,MongoDB需要为每个并发任务分配独立的变更流连接,从而加剧slots
资源的消耗。
机器资源限制
尽管您的机器配置为8C 32G,且Flink设置了20G的内存,但如果MongoDB实例本身资源有限(如CPU、内存不足),也可能导致slots
资源耗尽。此外,MongoDB的oplog
大小和清理策略也会影响变更流的可用性。
MongoDB的maxWireVersion
限制
如果MongoDB版本较低,可能不支持高效的变更流管理,导致资源浪费或连接数过多。
SET 'parallelism.default' = '4';
这样可以减少MongoDB的slots
资源消耗。
chunk.size
)来优化全量读取阶段的资源使用。slots
资源replica set
或sharded cluster
配置,确保有足够的slots
资源供变更流使用。可以通过以下命令查看当前的slots
使用情况:
db.adminCommand({getParameter: 1, internalQueryExecMaxBlockingSortBytes: 1})
如果slots
资源不足,可以尝试增加MongoDB实例的资源(如CPU、内存)或升级MongoDB版本。
slots
资源的消耗。启用方法如下:
SET 'table.optimizer.source-merge.enabled' = 'true';
注意:启用Source复用后,作业拓扑会发生变化,因此需要无状态启动作业。
oplog
配置oplog
大小足够大,以支持长时间的变更流读取。可以通过以下命令查看oplog
的大小:
rs.printReplicationInfo()
如果oplog
过小,可以通过修改MongoDB配置文件(mongod.conf
)来增加oplog
大小:
replication:
oplogSizeMB: 10240 # 设置为10GB
slots
资源的使用情况,并根据实际负载动态调整Flink作业的并发度和MongoDB的资源配置。通过以上措施,您可以有效解决MongoDB slots
资源耗尽的问题,同时优化Flink CDC作业的性能和稳定性。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。