

# 使用 Kinesis Data Streams 捕获 DynamoDB 的更改
<a name="kds"></a>

您可以使用 Amazon Kinesis Data Streams 捕获 Amazon DynamoDB 的更改。

Kinesis Data Streams 捕获任何 DynamoDB 表中的项目级别修改，并将它们复制到 [Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/introduction.html)。您的应用程序可以访问此数据流，近实时查看项目级别的更改。您可以每小时持续捕获和存储 TB 级的数据。您可以利用更长的数据保留时间，还可以借助增强的扇出功能同时访问两个或更多下游应用程序。其他优势包括额外的审计和安全透明度。

Kinesis Data Streams 还可让您访问 [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) 和[适用于 Apache Flink 的亚马逊托管服务](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/what-is.html)。这些服务可帮助您构建应用程序来支持实时控制面板、生成警报、实施动态定价和广告以及实现复杂的数据分析和机器学习算法。

**注意**  
为 DynamoDB 使用 Kinesis 数据流受数据流的 [Kinesis Data Streams 定价](https://aws.amazon.com/kinesis/data-streams/pricing/)和源表的 [DynamoDB 定价](https://aws.amazon.com/dynamodb/pricing/)影响。

要使用控制台、AWS CLI 或 Java SDK 在 DynamoDB 表上启用 Kinesis 流式传输，请参阅[适用于 Amazon DynamoDB 的 Kinesis Data Streams 入门](kds_gettingstarted.md)。

**Topics**
+ [Kinesis Data Streams 如何与 DynamoDB 结合使用](#kds_howitworks)
+ [适用于 Amazon DynamoDB 的 Kinesis Data Streams 入门](kds_gettingstarted.md)
+ [将 DynamoDB Streams 中的分片和指标与 Kinesis Data Streams 配合使用](kds_using-shards-and-metrics.md)
+ [使用适用于 Amazon Kinesis Data Streams 和 Amazon DynamoDB 的 IAM 策略](kds_iam.md)

## Kinesis Data Streams 如何与 DynamoDB 结合使用
<a name="kds_howitworks"></a>

为 DynamoDB 表启用 Kinesis 数据流时，该表将发送一条数据记录，其中捕获该表数据的任何更改。此数据记录包括：
+ 最近创建、更新或删除任何项目的具体时间
+ 该项目的主键
+ 修改前记录的快照
+ 修改后记录的快照 

将近乎实时地捕获并发布这些数据记录。将它们写入 Kinesis 数据流后，就可以像任何其他记录一样读取它们。您可以使用 Kinesis 客户端库，使用 AWS Lambda，调用 Kinesis Data Streams API，以及使用其他连接的服务。有关更多信息，请参阅 Amazon Kinesis Data Streams 开发人员指南的[从 Amazon Kinesis Data Streams 读取数据](https://docs.aws.amazon.com/streams/latest/dev/building-consumers.html)。

数据的这些更改也是异步捕获的。Kinesis 对其正在进行流式传输的表没有性能影响。存储在 Kinesis 数据流中的流记录也会静态加密。有关更多信息，请参阅 [Amazon Kinesis Data Streams 数据保护](https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html)。

Kinesis 数据流记录的显示顺序可能与项目更改发生时的顺序不同。同一项目通知也可能会在数据流中多次出现。您可以检查 `ApproximateCreationDateTime` 属性，以确定项目修改的发生顺序，并识别重复的记录。

当您启用 Kinesis 数据流作为 DynamoDB 表的流式传输目标时，您可以用毫秒或微秒为单位配置 `ApproximateCreationDateTime` 值的精度。默认情况下，`ApproximateCreationDateTime` 指示更改时间（以毫秒为单位）。此外，您可以在活动的流式传输目标上更改该值。更新后，写入 Kinesis 的流记录将具有所需精度的 `ApproximateCreationDateTime` 值。

写入 DynamoDB 的二进制值必须采用 [base64 编码格式](HowItWorks.NamingRulesDataTypes.md)进行编码。但是，当数据记录写入 Kinesis 数据流时，这些编码的二进制值将再次使用 base64 编码进行编码。从 Kinesis 数据流读取这些记录时，为了检索原始二进制值，应用程序必须对这些值进行两次解码。

DynamoDB 会对在更改数据捕获单元中使用 Kinesis Data Streams 收取费用。每个项目的 1KB 更改计为一个更改数据捕获单元。每个项目的更改 KB 数是由写入数据流的项目的“之前”和“之后”镜像中较大者计算得出，期间使用与[写入操作的容量单位消耗](read-write-operations.md#write-operation-consumption)相同的逻辑。您无需为更改数据捕获单元预置容量吞吐量，类似于 DynamoDB [按需](capacity-mode.md#capacity-mode-on-demand)模式的工作原理。

### 为 DynamoDB 表启用 Kinesis 数据流
<a name="kds_howitworks.enabling"></a>

可以使用 AWS 管理控制台、AWS SDK 或 AWS Command Line Interface (AWS CLI)，启用或禁用从现有 DynamoDB 表流式传输到 Kinesis。
+ 您只能从 DynamoDB 流式传输到从同一 AWS 账户和 AWS 区域中的 Kinesis Data Streams 作为您的表。
+ 您只能将数据从 DynamoDB 表流式传输到一个 Kinesis 数据流。

  

### 更改 DynamoDB 表上的 Kinesis Data Streams 目标
<a name="kds_howitworks.makingchanges"></a>

默认情况下，所有 Kinesis 数据流记录都包含一个 `ApproximateCreationDateTime` 属性。此属性表示创建每条记录的大致时间的时间戳（以毫秒为单位）。您可以使用 [https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)、SDK 或 AWS CLI 更改这些值的精度 