有人使用 flink-cdc-mongodb 或者 flink-connector-mongodb 做过大集群的读取没有? 同步不动啊,几十亿的源数据, 同步任务跑起来,每小时只能搞个600万,同步完都要1个多月, 数据还持续写入。用flink-cdc单并行度很慢,, 用 flink-connector-mongodb 按照chunk多并行度读取,也快不了多少。我能想到能加快的是先将mongodb的chunk移动关闭,然后通过读取chunk,自己写代码到不同的副本上去取, 但代码比较麻烦。另外服务器的高版本mongodb , 源库是mongodb 4.0.4 版本太低了,不敢升级。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您的描述,您在使用 Flink CDC MongoDB 或 Flink Connector MongoDB 进行大规模数据同步时遇到了性能瓶颈,具体表现为每小时只能处理约600万条数据,而源数据量达到几十亿条。此外,源库为 MongoDB 4.0.4 版本,目标库为高版本 MongoDB,且数据持续写入。以下是对问题的详细分析和解决方案建议。
chunk
分片实现多并行度读取,MongoDB 4.0.4 的分片机制可能不够高效,导致并行度提升的效果不明显。sh.stopBalancer()
同步完成后可以重新启用:
sh.startBalancer()
_id
或其他字段)并分配到多个并行任务中。例如:
splitVector
命令将数据划分为多个区间。mongosync
),它支持跨实例数据同步,并提供更高的性能和灵活性。env.setParallelism(16); // 根据硬件资源调整
env.getCheckpointConfig().setCheckpointInterval(60000); // 每分钟一次
MongoDBSource
时,启用增量快照功能以减少全量同步的压力:
MongoDBSource.builder()
.startupOptions(StartupOptions.initial()) // 全量同步
.build();
mongodump
和 mongorestore
)完成初始数据迁移。serverStatus
和 db.currentOp()
命令监控同步任务对源库的影响。针对当前问题,建议采取以下步骤: 1. 短期优化:关闭 Chunk 迁移,手动划分数据范围并分配到多个并行任务中。 2. 中期优化:评估升级源库版本,或使用 MongoDB 6.0 的 mongosync
工具进行跨实例同步。 3. 长期优化:结合全量同步和增量同步策略,逐步完成数据迁移。
重要提醒:在实施任何优化措施前,请务必进行充分测试,确保不会对生产环境造成影响。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。