为您的 Amazon DynamoDB 应用选择合适的更改数据捕获策略 数据库博客
选择适合的变更数据捕获策略来应对Amazon DynamoDB应用
作者:Michael Shao,2024年5月24日,来自 Amazon DynamoDB,最佳实践,中级(200)永久连接 评论 分享
文章要点
变更数据捕获CDC是从数据库捕获数据更改并将其发布到事件流的过程,使其他系统可以使用这些更改。Amazon DynamoDB 提供了强大的CDC机制,能够在近实时条件下捕获、处理和响应数据更改。DynamoDB 支持两种CDC流式模型:DynamoDB Streams 和 Kinesis Data Streams for DynamoDB。本文将分析这两种流式模型的应用场景及优缺点,并提供一些实际用例。变更数据捕获CDC是从数据库捕获数据更改并将其发布到事件流的过程,使得其他系统能够访问这些更改。Amazon DynamoDB的CDC提供了一种强大的机制,用于在近实时条件下捕获、处理和响应数据更改。无论您是构建事件驱动应用、与其他服务集成、实现数据分析或机器学习ML模型,或提供数据一致性与合规性,CDC都是您DynamoDB工具箱中的一个有价值工具。
在DynamoDB中,CDC是通过流式模型来实现的,允许应用在近实时条件下捕获DynamoDB表中项级别的更改。CDC数据记录流使应用能够高效处理和响应DynamoDB表中的数据修改。DynamoDB为CDC提供了两种流式模型: DynamoDB 流 和 Amazon Kinesis 数据流。
在本文中,我们将讨论DynamoDB Streams和Kinesis Data Streams for DynamoDB。首先,我们对DynamoDB Streams进行概述。接下来,我们讨论DynamoDB Streams在构建事件驱动应用和与其他服务集成以获取可执行洞察的作用与场景。我们还将简要概述 Amazon Kinesis 数据流,并提供一些使用Kinesis Data Streams for DynamoDB的更好场景。最后,我们将总结这两种选择的比较。
DynamoDB 流
DynamoDB 流捕获了表中项级更改的去重、按时间排序的序列,并将这些信息存储在日志中,最长可达24小时。根据您的 DynamoDB 流配置,您可以查看数据项在修改前后的状态。您可以构建消费这些流事件的应用,并根据事件流的内容调用工作流。
DynamoDB Streams在以下情况下非常实用:
使用本地集成的 AWS Lambda 对数据更改作出响应。来自DynamoDB Streams的Lambda消费请求在使用时无额外费用。此外,您可以通过 事件过滤 在使用DynamoDB时节省Lambda成本。追踪和分析客户互动,或在近实时中监控应用性能。这在数据仓库或分析用例中也会受益。捕获有序事件序列,这对故障排查、调试或合规机制支持审计跟踪非常重要。这在许多行业中至关重要,例如电子商务、金融服务和医疗保健等。通过复制作业级事务数据来提高应用的弹性。这还为数据可用性问题提供了缓解措施,例如在区域中断、部署问题或操作问题的情况下。示例用例:新用户注册时发送欢迎邮件
让我们用一个示例用例来说明上述的前两个功能:您正在创建一个Web应用,想要启用新用户在应用中注册账户。注册后,系统应自动调用发送欢迎邮件给新客户,并将该邮件的状态反馈回数据库。以下图展示了一种使用AWS构建这一流程的方式。
工作流包括以下步骤:
新用户通过提供他们的电子邮件地址注册新账户。PUT/POST请求在DynamoDB中创建一个新项,从而生成DynamoDB流记录。一个Lambda过滤DynamoDB流中的新用户事件待处理。Lambda函数使用Amazon 简单电子邮件服务 (Amazon SES) 向新用户发送欢迎信息的邮件。Amazon SES将邮件发送状态报告给Amazon 简单通知服务 (Amazon SNS),指示投递成功或失败。第二个Lambda函数处理SNS主题中的消息,并在DynamoDB表中更新新注册用户的投递状态。为了扩展此解决方案以使用DynamoDB流进行异常和欺诈检测,您可以参考 使用Amazon SageMaker随机切割森林算法进行Amazon DynamoDB Streams的异常检测。关于另一位客户用DynamoDB构建欺诈检测系统的示例,请见 Getir如何利用Amazon Neptune和Amazon DynamoDB构建综合性欺诈检测系统。
示例用例:全球竞争游戏应用
就前面的第三和第四个功能,我们来看一个不同的示例,展示跨AWS区域的项级更改复制,并在近实时条件下捕获和处理数据更改。考虑一个流行的游戏应用,玩家在全球范围内竞争排行榜,并实时更新玩家统计数据和成就,其中“首次完成”可以打破两个玩家同分的平局。有关示例游戏应用程序,请参见 数据建模示例。以下图展示了如何在AWS中构建这一流程。
工作流的步骤包括:
游戏玩家通过 Amazon CloudFront 和 Amazon API Gateway 完成任务,并将有关其游戏状态的统计数据上传至其相应的区域游戏端点。一个Lambda函数处理来自API Gateway的请求。Lambda函数在DynamoDB中创建一个项,表示玩家的游戏状态游戏领域、区域、完成时间和相关任务统计。每当创建、更新或删除一个项时,DynamoDB Stream记录会推送以表示状态的变化。此DynamoDB Stream记录被推送至 Amazon EventBridge Pipes 作为源事件。EventBridge Pipes中的源事件被发布到一个 Amazon 简单队列服务 (Amazon SQS) 队列目标中,该区域集中存储全球游戏状态、全球任务完成顺序和排名排行榜。另一个Lambda函数处理来自所有游戏区域的SQS消息。Lambda函数同样在DynamoDB中创建一个项,表示玩家的区域游戏状态与步骤3中的信息类似,但带有附加元数据。区域和全球的Lambda函数基于显著统计信息过滤流记录。SNS主题还可以进一步集成到网站应用程序或游戏内展示中。另一个Lambda函数发布全球玩家统计数据和分析,以监控和跟踪游戏中的进展和表现。该工作流展示了一个使用DynamoDB Streams以支持扩展复杂的全球竞争游戏应用的示例用例。每个游戏会话在区域内持久化,但在全球范围内复制作业;可以跟踪跨所有区域的完成顺序,并实现更新的全球排行榜,在新的记录建立时及时通知全球玩家。
凭借DynamoDB Streams,该应用能够可靠地捕获状态更新,同时保持以下特点:
就每个修改的项,事件按序列号严格有序,准确反映出区域和全球用户的完成顺序。在短暂的连通性问题期间,流记录自动去重,防止排序错误和统计膨胀。如果流记录消费者在本示例中是一个Lambda函数未能报告事件消费,另一消费者在本示例中是另一个Lambda函数可以重新消费同一事件。有关于如何确保您的Lambda函数是幂等的更多信息,请查看 如何使我的Lambda函数幂等?近实时复制作业,允许排行榜和个人资料快速通知和更新新成就。享受来自DynamoDB的高可用性,在高峰期间提供持续更新。平滑的分片扩展,以处理不断增加的流量,并实现自动配置分片上的并行记录处理。使用DynamoDB Streams,游戏应用在移动和桌面游戏设备上都能提供一致的实时排行榜体验,无需额外的操作负担。
其他用例:利用DynamoDB Streams进行跨服务数据复制与集成
使用DynamoDB流的客户还可以从与其他AWS服务的集成中受益,例如 Amazon Managed Streaming for Apache Kafka (Amazon MSK)、Amazon Neptune 或通过EventBridge Pipes执行高级处理的其他集成目标,比如 AWS Step Functions 或 Amazon SageMaker。这样,DynamoDB Streams提供了另一个用例:对PB级数据集进行复杂查询、分析和搜索。以下图展示了这一工作流的可视化。

工作流步骤包括:
各类数据作为项发布至DynamoDB。每次新更改都作为事件捕获在DynamoDB流中。DynamoDB 流事件触发Lambda函数。另外,DynamoDB流事件也可以在与EventBridge Pipes集成时作为源。Lambda函数将流记录转换为目标格式并将更改发布到预期的服务目标上。另外,流事件可以通过EventBridge Pipes传输到集成目标,如Step Functions或SageMaker,以进行复杂处理。使用DynamoDB Streams构建大型数据分析管道,便于利用现有数据信息基础架构进行跨服务数据复制与集成,可以简化信息架构。这可以增强处理复杂工作负载、创建可扩展应用程序以及对包含大文件的庞大数据集进行分析、查询或搜索的能力。
Kinesis 数据流 for Amazon DynamoDB
在前一部分中,我们介绍了使用DynamoDB Streams可以帮助您的示例。在以下用例中,您应选择Kinesis Data Streams for DynamoDB:
魔方加速器免费正版您希望与更广泛的Kinesis生态系统集成如Kinesis客户端库、Amazon Managed Service for Apache Flink 或 Amazon 数据消防hose以汇总其他服务的更改日志事件。您需要更长的数据保留和重放能力最长可达365天。您需要自定义分片管理。您需要用于下游消费和流分析的增强的扇出,或为所有分片提供最低延迟的专用读取吞吐量。在使用与Firehose结合的Kinesis Data Streams for DynamoDB时,您可以将DynamoDB数据摄取到各种外部应用中,如Amazon 简单存储服务 (Amazon S3)、Amazon Redshift或Amazon OpenSearch服务。有关可能目的地的更多信息,请参见目的地设置。
与DynamoDB Streams不同,Kinesis Data Streams for DynamoDB不提供记录排序或去重。记录排序和去重必须由客户端应用实现,使用项级记录中的ApproximateCreationDateTime字段。Kinesis Data Streams for DynamoDB提供灵活性,允许手动分片供给与监控,使得多达20个消费者能并行处理流事件,因为流记录在写入后即可被消费。
示例用例:使用Kinesis Data Streams处理和分析数据
我们可以用一个示例客户用例来演示这一点:一个电子商务平台需要实时处理和分析来自各种来源Web和移动应用、物联网设备的点击流数据,以获得用户行为的洞察,检测异常,并进行有针对性的市场营销活动。
以下图展示了一个工作流示例,用于通过Kinesis Data Streams将分析数据从DynamoDB交付到流处理器,在那里对其进行汇总和处理,然后交付到分析存储,并可供大数据查询和进一步分析。
工作流的步骤包括:
点击流数据、客户行为及会话数据和订单数据通过任何DynamoDB的数据摄取代理例如API Gateway进行摄取。如果点击流数据模式相同,多种输入可以流入同一DynamoDB表。项级更改从DynamoDB表发布到Kinesis数据流中。Kinesis Data Streams将记录发送到流处理器Firehose、Amazon MSK、Apache Flink托管服务进行存储。流处理器汇总并将处理后的数据存储到数据湖中,用于进一步的商业智能BI和分析。该工作流展示了Kinesis Data Streams for DynamoDB如何有效管理多种客户行为数据点击流、会话和订单信息的处理,通过更广泛的Kinesis分析生态系统分析大量实时客户数据。要了解更多如何将DynamoDB数据流式传输到集中式数据湖的信息,请参见将Amazon DynamoDB数据流式传输到集中式数据湖。
变更数据捕获的流式选项概述
正如本文所述,DynamoDB提供了两种用于变更数据捕获的流模型:DynamoDB Streams 和 Kinesis Data Streams for DynamoDB。以下表格对这两种流模型进行了比较总结。
属性DynamoDB StreamsKinesis Data Streams for DynamoDB数据保留24小时默认24小时,最长可达 1年消费者数量每个分片最多 两个并发 消费者。每个分片最多 5个共享吞吐量 消费者,或通过增强的