在 DynamoDB 中使用 Kinesis Data Streams 配置分片并监控更改数据捕获
Kinesis Data Streams 的分片管理注意事项
Kinesis 数据流以分片形式计算其吞吐量。您将需要在 Kinesis 数据流上预置适当数量的分片,以容纳 DynamoDB 中的更改数据捕获记录。要确定 Kinesis 数据流支持 DynamoDB 表所需的分片数量,请考虑如下事项:
-
DynamoDB 表记录的平均大小,以字节为单位 (
average_record_size_in_bytes
)。 -
每秒对 DynamoDB 表执行的最大写入操作数。这包括由您的应用程序执行的创建、删除和更新数据操作以及自动生成的操作,例如“生存时间”生成的删除 (
write_throughput
)。 -
您对表执行的更新和覆盖操作与创建或删除操作相比的百分比 (
percentage_of_updates
)。请注意,更新和覆盖操作会将已修改项目的旧镜像和新镜像复制到流中。这会生成两倍 DynamoDB 项目大小。
您可以使用以下公式估计 DynamoDB 表的吞吐量所需的分片数量 (number_of_shards
):
number_of_shards = ceiling( ((write_throughput * (1+percentage_of_updates) * average_record_size_in_bytes) /1024 /1024), 1)
例如,您的最大吞吐量为 40 个写入操作/秒 (write_throughput
),平均记录大小为 1285 字节 (average_record_size_in_bytes
)。如果 25% 的写入操作是更新操作 (percentage_of_updates
),则需要两个分片 (number_of_shards
) 以适应 DynamoDB 数据流式传输吞吐量:ceiling( ((40 * (1+(25/100) * 1285 )/ 1024 / 1024), 1 )。
请注意,此公式仅反映适应 DynamoDB 流吞吐量所需的分片。它不代表 Kinesis 数据流中所需的分片总数,例如支持 Kinesis 数据流使用者所需的分片。
要了解有关如何确定 Kinesis 数据流的大小的详细信息,请参阅确定 Kinesis Data Streams 的初始大小。
使用 Kinesis Data Streams 监控更改数据捕获
DynamoDB 提供多个 Amazon CloudWatch 指标,帮助您监控将更改数据捕获到 Kinesis 的复制。有关 CloudWatch 指标的完整列表,请参阅DynamoDB 指标与维度。
我们建议您在流启用期间和生产中监视以下项目,以确定流是否有足够的容量:
-
ThrottledPutRecordCount
:由于 Kinesis Data Streams 容量不足而受到 Kinesis 数据流限制的记录数量。异常使用高峰期间可能会遇到一些限制,但ThrottledPutRecordCount
应保持尽可能低。DynamoDB 重试将受限制的记录发送到 Kinesis 数据流,这可能会导致更高的复制延迟。如果遇到过多和定期的限制,则可能需要按照观察到的表写入吞吐量成比例增加 Kinesis 流分片数量。要了解有关如何确定 Kinesis 数据流的大小的详细信息,请参阅确定 Kinesis Data Streams 的初始大小。
-
AgeOfOldestUnreplicatedRecord
:从等待复制的最早的项目级别更改,到 Kinesis 数据流出现在 DynamoDB 表中经过的时间。在正常运行情况下,AgeOfOldestUnreplicatedRecord
应该以毫秒为单位。如果失败的尝试由客户控制的配置选项造成,失败的复制尝试次数会增加。例如,可能导致复制尝试失败的客户控制配置包括:预置不足的 Kinesis 数据流容量导致过度限制,或者手动更新 Kinesis 数据流的访问策略阻止 DynamoDB 向数据流添加数据。您可能需要确保预置合适的 Kinesis 数据流容量,并确保未更改 DynamoDB 的权限,才能将该指标保持在尽可能低的水平。
-
FailedToReplicateRecordCount
:DynamoDB 无法复制到 Kinesis 数据流的记录数。某些大于 34KB 的项目可能会扩增,以更改大于 Kinesis Data Streams 1MB 项目大小限制的数据记录。当大于 34KB 的项目包含大量布尔值或空属性值时,就会出现此扩增现象。布尔值和空属性值在 DynamoDB 中存储为 1 个字节,但在使用标准 JSON 进行 Kinesis Data Streams 复制时,最多可扩展到 5 个字节。DynamoDB 无法将此类更改记录复制到 Kinesis 数据流中。DynamoDB 跳过这些更改数据记录,并自动继续复制后续记录。
您可以创建 Amazon CloudWatch 警报,以便在上述任何指标超过特定阈值时发送 Amazon Simple Notification Service (Amazon SNS) 消息,以便发送通知。有关更多信息,请参阅创建 CloudWatch 警报以监控 DynamoDB。