分片集群的 changestream 监控单collection 速度跟不上,超过oplog window ,导致数据同步失败,有什么方法 可以优化吗,单collection 好像也没办法拆分加并发之类。怎么提高changestream 读取性能,改变batchsize 变化不大。
huanlan 未选择答案
监听同步数据 基本没有逻辑处理 ,现在是获取速度慢,监听单个collection ,数据需要时序,无法增加并发
你的场景是属于生产端比消费端快。不知道你的目标端是什么环境,写入速度在什么水平(和 mongodb 的写入差距)。可以考虑:
1. 单集合内按某个业务ID来做哈希,拆分多线程处理,例如消息表(按用户ID,只需保证用户范围内有序)
2. 如果想提供更可靠的保证,增加消息队列来存储变更,但成本也会增加不少。
另外,changeStream 你是按集合粒度,不要同时打开太多(影响性能)
https://jira.mongodb.org/browse/SERVER-32946
我是用changeStream同步数据到其他数据库,changeStream 只找到单线程监听某个collection,而且数据 有时间依赖性(前面插入后面删除或者更新 ,如果乱序会结果不对),无法增加并发,基本没有什么过滤逻辑处理,消费速度 一直跟不上oplog产生速度。导致超过oplog窗口。添加batch数量影响不大。也找过帖子说分片集群changeStream需要排序和去除 MoveChunk 语句 导致性能不好 ,提高性能得自己写监听所有shard 节点,并做各种处理得到结果,这种开发成本就很高了。