View a markdown version of this page

预置吞吐量错误 - Amazon Kinesis Data Streams

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

预置吞吐量错误

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

处理异常的建议
  • 实现指数退避与重试机制。

  • 增加分片数量以适应更高的吞吐量。

  • 确保分区键正常分布。

  • 监控流指标。

此外,使用 Kinesis 按需容量模式有助于自动调整工作负载,并最大限度地减少这种异常的发生。有关更多信息,请参阅什么是 AWS Fault Injection Service?

注意

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

进行基础实验
  1. 使用基准指标:测试之前记录正常的吞吐量模式。

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

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

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

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

  6. 检查警报:确保 CloudWatch 警报按预期运行。

应用程序应实施适当的退避策略、监控 WriteProvisionedThroughputExceededReadProvisionedThroughputExceeded 指标,并在适当时触发分片扩缩。

操作详细信息
  • 资源类型:IAM 角色 ARN

  • 目标操作PutRecordPutRecordsGetRecords

  • 错误代码ProvisionedThroughputExceededException(HTTP 400)

  • 描述:模拟请求速率超出分片容量限制的场景,测试应用程序限制和扩缩响应。

参数
  • IAM 角色 ARN:应用程序用于 Kinesis Data Streams 操作的角色。

  • 操作:目标操作:PutRecordPutRecordsGetRecords

  • 资源列表:特定的流名称或分片标识符。

  • 持续时间:实验的持续时间,从一分钟到 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-exceptionaws:kinesis:stream-expired-iterator-exception 操作来影响 50% 的请求。