本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
预置吞吐量错误
当某个 Kinesis 流的请求速率超出一个或多个分片的吞吐量限制时,就会出现超出预置吞吐量异常错误(HTTP 400)。每个分片都有特定的读取和写入容量限制,超出这些限制就会触发这种异常。导致此种异常的场景包括:数据摄取或消耗量突然飙升,分片容量不足以应对正在处理的数据量,或者分区键分布不均。
处理异常的建议
-
实现指数退避与重试机制。
-
增加分片数量以适应更高的吞吐量。
-
确保分区键正常分布。
-
监控流指标。
此外,使用 Kinesis 按需容量模式有助于自动调整工作负载,并最大限度地减少这种异常的发生。有关更多信息,请参阅什么是 AWS Fault Injection Service?
注意
分布不当问题不在按需模式的自动扩缩功能范围之内。
进行基础实验
使用基准指标:测试之前记录正常的吞吐量模式。
创建实验:使用
aws:kinesis:inject-api-provisioned-throughput-exception操作。配置强度:从 25% 的请求限制开始。
监控响应:通过指数退避验证重试逻辑。
验证扩缩:确认自动扩缩放触发了激活。
检查警报:确保
CloudWatch警报按预期运行。
应用程序应实施适当的退避策略、监控 WriteProvisionedThroughputExceeded 和 ReadProvisionedThroughputExceeded 指标,并在适当时触发分片扩缩。
操作详细信息
-
资源类型:IAM 角色 ARN
-
目标操作:
PutRecord、PutRecords、GetRecords -
错误代码:
ProvisionedThroughputExceededException(HTTP 400) -
描述:模拟请求速率超出分片容量限制的场景,测试应用程序限制和扩缩响应。
参数
-
IAM 角色 ARN:应用程序用于 Kinesis Data Streams 操作的角色。
-
操作:目标操作:
PutRecord、PutRecords、GetRecords。 -
资源列表:特定的流名称或分片标识符。
-
持续时间:实验的持续时间,从一分钟到 12 小时不等。在 AWS FIS API 中,该值是 ISO 8601 格式的字符串。例如, PT1M 代表一分钟。在 AWS FIS 控制台中,您可以输入秒数、分钟数或小时数。
-
强度:要施加限制的请求的百分比。
所需的权限
-
kinesis:InjectApiError
实验模板示例
以下示例显示了带有指定标签的所有请求(最多 5 个 Kinesis 数据流)的预配置吞吐量异常。 AWS FIS 随机选择要影响的直播。5 分钟后故障解决。
{ "description": "Kinesis stream experiment", "targets": { "KinesisStreams-Target-1": { "resourceType": "aws:kinesis:stream", "resourceTags": { "tag-key": "tag-value" }, "selectionMode": "COUNT(5)" } }, "actions": { "kinesis": { "actionId": "aws:kinesis:stream-provisioned-throughput-exception", "description": "my-stream", "parameters": { "duration": "PT5M", "percentage": "100", "service": "kinesis" }, "targets": { "KinesisStreams": "KinesisStreams-Target-1" } } }, "stopConditions": [ { "source": "none" } ], "roleArn": "arn:aws:iam::111122223333:role/role-name", "tags": {}, "experimentOptions": { "accountTargeting": "single-account", "emptyTargetResolutionMode": "fail" } }
实验角色权限示例
以下权限支持在特定流上执行 aws:kinesis:stream-provisioned-throughput-exception 和 aws:kinesis:stream-expired-iterator-exception 操作来影响 50% 的请求。