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 索引更新、缓存失效、向其他服务的数据同步和审计日志记录。批量大小和批量窗口的设置可调整吞吐量和延迟的平衡。

图:从变更写入 oplog 到反映到下游的四个阶段
  1. 1. 变更被记录到 oplog对集合的插入、更新、删除、替换都会写入集群的变更日志(oplog)。Change Streams 以该日志为基础,因此事件按变更发生的顺序投递。
  2. 2. 组装变更事件每个事件都包含 operationType(insert、update、delete)、documentKey(被修改文档的 ID)和 fullDocument(变更后的完整文档)。它与 MongoDB 的 Change Streams API 兼容,现有应用代码可以直接使用。
  3. 3. 投递到 Lambda 的事件源映射配置为事件源映射后,变更事件会自动交给 Lambda 函数。通过批大小与批处理窗口把多个事件合并处理,可以提高吞吐量。
  4. 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 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。

如本页内容与官方文档不一致,请以官方文档为准。