View a markdown version of this page

更改数据捕获流(预览版) - Amazon Aurora DSQL

更改数据捕获流(预览版)

重要

此功能以 AWS 预览版形式提供,可能会发生变化。有关更多信息,请参阅 AWS Service Terms 中的第 2 部分“Betas and Previews”。要了解有关 CDC 流的定价的更多信息,请参阅 Aurora DSQL 定价页面

在正式发布之前,我们将向流有效载荷添加新的操作类型("op": "u" 表示更新)。要确保您的应用程序无需修改即可处理这些更改,请通过应用 after 有效载荷将任何无法识别的 op 值视为更新插入。有关详细信息,请参阅了解 CDC 记录

Amazon Aurora DSQL 更改数据捕获(CDC)可近乎实时地将已提交的数据库更改直接流式传输到 Amazon Kinesis Data Streams。Aurora DSQL 将每个已提交的行级更改作为结构化 JSON 记录传输到您配置的 Kinesis 数据流。

在需要执行以下操作时,CDC 会很有用:

  • 保持下游系统同步:将更改复制到搜索索引、缓存、数据仓库或分析系统,而无需批处理作业。

  • 构建事件驱动型架构:触发工作流程、通知或微服务操作以响应数据库更改。

  • 维护审计跟踪记录:捕获每项已提交的更改,以进行合规、调试或历史分析。

  • 使创建者与使用者分离:让数据库专注于事务处理,同时下游系统可按自己的节奏处理更改。

工作原理

Aurora DSQL 读取提交的事务,将每个行更改格式化为结构化 JSON 记录,然后将其传输到您配置的 Kinesis 数据流。CDC 会自动捕获集群中所有用户表中的每个 INSERTUPDATEDELETE。通过使用每个 CDC 记录中的 source.schemasource.table 字段,在下游应用程序中应用筛选逻辑,以专注于应用程序所需的表或更改。

CDC 流是完全托管的。Aurora DSQL 管理捕获更改事件所需的所有基础设施、监控流运行状况,并通过 GetStream API 操作和 CloudWatch 指标来报告状态。

CDC 流使用自带目标模式。您在自己的账户中创建并管理 Kinesis 数据流,Aurora DSQL 会代入您配置的 IAM 角色来代表您写入 CDC 记录。您需要负责目标的容量、加密和保留设置。有关最新支持的目标,请参阅《Amazon Aurora DSQL API 参考》中 CreateStream 中的 TargetDefinition 参数。有关 CDC 流 API 操作的完整列表,请参阅《Amazon Aurora DSQL API 参考》

本页面上的主题

排序和传输语义

传输保证

Aurora DSQL CDC 保证每项已提交的更改均至少到达目标一次。Aurora DSQL 可能会多次传输同一条记录。设计应用程序以处理重复记录。您可以通过比较 source.ts_ns 和主键值来识别重复记录,重复记录具有与最初传输的记录相同的值。

排序

CDC 流使用 UNORDERED 模式。实际上,由于 Aurora DSQL 按顺序读取并发布更改,因此,记录大致会按照提交顺序到达。但是,Aurora DSQL 不保证严格遵循顺序。具体来说:

  • Aurora DSQL 可能按任意顺序传输来自不同事务的记录。

  • 来自不同事务的、属于同一主键的记录可能不按提交顺序到达。

  • 来自单个事务的记录可能与来自其他事务的记录交错。当您的工作流程需要按事务对记录进行分组时,可使用 source.txId 字段执行此操作。

每条 CDC 记录均包含一个 source.ts_ns 字段,该字段包含事务提交时间戳(以纳秒为单位)。使用此字段可在接收端建立提交顺序。

使用者策略

由于记录可能不按提交顺序到达,并且可能多次出现,因此您的应用程序必须同时处理这两种情况。

重要

在所有参与 CDC 的表上定义主键。如果没有主键,您的应用程序将无法对记录进行重复数据删除,也无法将删除操作与受影响的行相关联。

末次写入优先(实体化视图、缓存)

按主键跟踪最大 source.ts_ns 值。丢弃任何 source.ts_ns 小于或等于所跟踪值的记录。这将筛选重复记录和乱序记录,并为每个键保留最新状态。处理删除操作(op: "d")时,请为主键存储一个用于保留 source.ts_ns 值的删除标记,而不是删除该条目。删除标记可确保在删除操作之后到达的、具有更早的 source.ts_ns 的插入或更新操作不会错误地恢复该行。

全更改处理(审计日志、事件溯源)

通过比较 source.ts_ns 与主键值来删除重复记录。对传入记录进行缓冲,并在处理前按 source.ts_ns 进行排序,以重建提交顺序。

多区域 CDC 流配置

CDC 流是一种区域性资源。每个流均属于一个 AWS 区域,并将更改传输到同一区域中的 Kinesis 数据流。在多区域集群上,任一区域中的 CDC 流都会捕获来自集群中所有区域的已提交写入。这意味着,不管写入操作是从什么位置发起的,您都只需要一个流即可捕获所有更改。要在多个区域中传输 CDC 记录,可在每个区域中创建一个单独的流。每个流都会单独捕获整个集群中所有已提交的更改。

所有资源(Aurora DSQL 集群、Kinesis 数据流、IAM 服务角色和调用主体)都必须在同一 AWS 账户和区域中。

下游处理 CDC 记录

在 CDC 记录到达您的 Kinesis 数据流后,您可以直接处理它们,也可以使用 AWS 集成服务将它们路由到其他目标。下表汇总了常见处理模式。

CDC 记录的常见处理模式
模式 工作原理
直接使用 Read records from Kinesis by using the Amazon Kinesis Client Library (KCL), the AWS SDK, or a Kinesis Data Streams consumer. See 开发 KCL 使用者 in the 《Amazon Kinesis Data Streams 开发人员指南》.
AWS Lambda Configure a Lambda function as an event source for your Kinesis data stream to process each batch of CDC records as they arrive. See 结合使用 AWS Lambda 和 Amazon Kinesis in the 《AWS Lambda 开发人员指南》.
Amazon Data Firehose Deliver CDC records from Kinesis to Amazon S3, Amazon Redshift, Amazon OpenSearch Service, or other destinations for analytics and archival. See 将数据发送到传输流 in the 《Amazon Data Firehose 开发人员指南》.
自行管理的使用者 Run Apache Kafka Connect with the Kinesis source connector, Apache Flink, or other stream processing frameworks to transform and route records. For Apache Flink on AWS, see 配置应用程序输入 in the 《适用于 Apache Flink 的亚马逊托管服务开发人员指南》.

每条 CDC 记录均包含 source.schemasource.tableop 等字段,可在处理逻辑中使用这些字段来路由和筛选记录。有关完整记录架构,请参阅了解 CDC 记录