MongoDB change stream 消费(结构示意)
MongoDB change stream 消费(结构示意)
const cs = db.orders.watch();
while (cs.hasNext()) {
const e = cs.next();
// 幂等写入下游:以 documentKey._id + 版本号去重
upsertIntoSearch(e.documentKey._id, e.fullDocument);
saveResumeToken(e._id); // 断点续传,进程重启从 token 继续
}
// 只订阅关心的变更
// db.orders.watch([{ $match: { operationType: { $in: ["insert", "update", "replace"] } } }])| 双写 | 写主库成功后写派生存储;失败进补偿队列,靠定时对账兜底 |
|---|---|
| CDC | Debezium 等工具把 MySQL binlog / PostgreSQL 逻辑复制 / MongoDB change stream 转成 Kafka 事件 |
| 消费要求 | 至少一次投递:按主键做幂等 upsert,删除事件同样要传递 |
选择逻辑:无法改动写代码或变更量大时用 CDC;链路要极简、延迟要求高时双写加对账更直接。两者都建议保留全量重建能力以修复历史漂移。