

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 预置吞吐量错误
<a name="kinesis-fis-provisioned-throughput"></a>

当某个 Kinesis 流的请求速率超出一个或多个分片的吞吐量限制时，就会出现超出预置吞吐量异常错误（HTTP 400）。每个分片都有特定的读取和写入容量限制，超出这些限制就会触发这种异常。导致此种异常的场景包括：数据摄取或消耗量突然飙升，分片容量不足以应对正在处理的数据量，或者分区键分布不均。

**处理异常的建议**
+ 实现指数退避与重试机制。
+ 增加分片数量以适应更高的吞吐量。
+ 确保分区键正常分布。
+ 监控流指标。

此外，使用 Kinesis 按需容量模式有助于自动调整工作负载，并最大限度地减少这种异常的发生。有关更多信息，请参阅[什么是 AWS Fault Injection Service？](https://docs.aws.amazon.com/fis/latest/userguide/what-is.html)

**注意**  
分布不当问题不在按需模式的自动扩缩功能范围之内。

**进行基础实验**

1. 使用基准指标：测试之前记录正常的吞吐量模式。

1. 创建实验：使用 `aws:kinesis:inject-api-provisioned-throughput-exception` 操作。

1. 配置强度：从 25% 的请求限制开始。

1. 监控响应：通过指数退避验证重试逻辑。

1. 验证扩缩：确认自动扩缩放触发了激活。

1. 检查警报：确保 `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% 的请求。