DocumentDB Change Streams - 实时捕获文档变更实现事件驱动架构
解说 DocumentDB 的 Change Streams 实时捕获文档变更的机制、与 Lambda 触发器的集成以及故障恢复时的 resume token 管理。
Change Streams 的机制
DocumentDB 的 Change Streams 是实时捕获集合变更(插入、更新、删除、替换)的功能。与 MongoDB 的 Change Streams API 兼容,可直接使用现有 MongoDB 应用程序的代码。Change Streams 读取集群的操作日志(oplog),按变更发生顺序传递事件。每个事件包含操作类型、变更后的文档全文和 resume token。
与 Lambda 触发器的集成
将 DocumentDB 的 Change Streams 设置为 Lambda 的事件源映射后,变更事件会自动传递到 Lambda 函数。在 Lambda 函数中根据事件类型执行处理。典型用例包括 OpenSearch 索引更新、缓存失效、向其他服务的数据同步和审计日志记录。批量大小和批量窗口的设置可调整吞吐量和延迟的平衡。
- 1. 变更被记录到 oplog对集合的插入、更新、删除、替换都会写入集群的变更日志(oplog)。Change Streams 以该日志为基础,因此事件按变更发生的顺序投递。
- 2. 组装变更事件每个事件都包含 operationType(insert、update、delete)、documentKey(被修改文档的 ID)和 fullDocument(变更后的完整文档)。它与 MongoDB 的 Change Streams API 兼容,现有应用代码可以直接使用。
- 3. 投递到 Lambda 的事件源映射配置为事件源映射后,变更事件会自动交给 Lambda 函数。通过批大小与批处理窗口把多个事件合并处理,可以提高吞吐量。
- 4. 反映到下游,并用 resume token 保留续读点常见处理包括更新 OpenSearch 索引、失效 ElastiCache 缓存、同步到 DynamoDB、发送 SNS 通知。保存每个事件附带的 resume token,故障恢复时就能从最后处理的事件之后继续读取(事件源映射会自动管理)。
故障恢复与运维注意事项
Change Streams 的每个事件包含 resume token,保存此 token 后可在故障恢复时从最后处理的事件之后继续读取。Lambda 的事件源映射中 resume token 管理是自动化的。自行管理的消费者需要将 resume token 持久化到 DynamoDB 等存储中。变更日志的保留期最长 7 天,超过后事件将被删除。
Change Streams 的费用考虑
Change Streams 本身不产生额外费用,但变更日志的保留会消耗 I/O 和存储。变更日志保留期最长 7 天,写入频繁的集合存储使用量会增加。使用 Lambda 触发器时,Lambda 的调用次数和执行时间费用另行产生。通过批量大小设置减少 Lambda 调用次数可优化成本。
总结
DocumentDB 的 Change Streams 是实时捕获文档变更并构建事件驱动架构的功能。通过 Lambda 触发器自动处理变更,集成到 Kinesis Data Streams 可向下游分析管道传递数据。resume token 管理确保故障恢复时不丢失事件。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。