

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 佈建輸送量例外狀況錯誤
<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)
+ ****描述****：模擬請求率超過碎片容量限制、測試應用程式限流和擴展回應的情況。

**Parameters**
+ **IAM 角色 ARN**：您的應用程式用於 Kinesis Data Streams 操作的角色。
+ **操作**：目標操作：`PutRecord`、`PutRecords`、`GetRecords`。
+ **資源清單**：特定的串流名稱或碎片識別符。
+ **持續時間**：實驗持續時間，也就是從一分鐘到 12 小時的持續時間。在 AWS FIS API 中，值是 ISO 8601 格式的字串。例如，PT1M 代表一分鐘。在 AWS FIS 主控台中，您可以輸入秒數、分鐘數或小時數。
+ **強度**：要調節的請求百分比。

**所需的許可**
+ `kinesis:InjectApiError`

範例實驗範本

 下列範例顯示最多 5 個 Kinesis Data 串流具有指定標籤的所有請求的佈建輸送量例外狀況。 會隨機 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"
   }    
}
```

實驗角色許可範例

下列許可可讓您對影響 50% 請求的特定串流執行 `aws:kinesis:stream-provisioned-throughput-exception`和 `aws:kinesis:stream-expired-iterator-exception`動作。