

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

# 對資料交付進行故障診斷
<a name="data-delivery-troubleshooting"></a>

 使用本節來解決資料交付的常見問題。

## 交付停滯在 CREATING 狀態
<a name="troubleshooting-creating"></a>

 當您建立交付時，它會在佈建資源時進入 CREATING 狀態。佈建通常會在幾分鐘內完成。如果交付在 CREATING 中長時間保留或轉換為 FAILED，則組態錯誤可能是原因。

 呼叫 `DescribeChannel` 以檢查目前的狀態和狀態原因。常見原因包括：
+ 無效的 IAM 角色 ARN 或角色政策中的許可不足。
+ 目的地 Amazon S3 儲存貯體不存在或位於不同區域。
+ 無法解析結構描述登錄檔中的 AWS Glue 結構描述 ARN。

## 交付處於 FAILED 狀態
<a name="troubleshooting-failed"></a>

 您無法復原 `ChannelStatus` 的交付 `FAILED`（由 傳回`DescribeChannel`)。從 讀取 `ChannelStatusReason` 欄位`DescribeChannel`以識別根本原因。修正基礎問題、刪除失敗的交付，並使用更正後的組態重新建立交付。

## 高資料新鮮度
<a name="troubleshooting-high-data-freshness"></a>

 `DataFreshness` 指標會測量最舊未交付記錄的存留期。高值表示交付落後於擷取。常見原因：
+ 目的地資料表上的高分割區計數會增加中繼資料額外負荷。
+ 許多小型遞交的資料表中繼資料成長會降低遞交輸送量。
+ 低串流輸送量結合低新鮮度設定會導致頻繁的小型交付。

 解決方案：針對 Apache Iceberg 上的串流資料表，啟用 Amazon S3 Tables 維護 （壓縮和快照過期） 來管理中繼資料成長。對於低輸送量串流，請增加 `DataFreshnessInSeconds`值，以允許為每個交付週期批次處理更多資料。

 最緊密的資料新鮮度設定需要最低的持續串流輸送量，以便有足夠的資料累積，以便每個週期有效率交付和內嵌壓縮。如果您的串流產生的輸送量小於該輸送量，請使用較高的`DataFreshnessInSeconds`值。

## 失敗的記錄大於零
<a name="troubleshooting-failed-records"></a>

 當失敗的記錄指標不是零時 (`DeliveryToS3.FailedRecordCount`對於 Amazon S3 交付或`DeliveryToIceberg.FailedRowCount`串流資料表交付），記錄會傳送到無效字母佇列，而不是目的地。

 **針對 Apache Iceberg 上的串流資料表：**
+ 結構描述不相符 – 記錄不符合已註冊的結構描述。
+ 缺少必要欄位 – 不可為空的資料欄在記錄中沒有值。
+ 未使用適用於 GSR\_JSON 格式的 AWS Glue 結構描述登錄序列化程式 – 生產者必須使用 AWS Glue 結構描述登錄生產者程式庫。

 **針對一般用途的 Amazon S3 儲存貯體：**
+ 格式不相符 – 記錄格式不符合設定的輸入格式。

 解決方案：檢查無效字母佇列項目以取得詳細的錯誤資訊。檢查 CloudWatch Logs 是否有交付，以查看特定的剖析或驗證錯誤。修正生產者以傳送符合的記錄。

## 目的地未顯示任何資料
<a name="troubleshooting-no-data"></a>

 如果交付處於 ACTIVE 狀態，但目的地未顯示任何資料，最常見的原因是：
+ 許可問題 – IAM 角色無法寫入目的地。檢查 CloudWatch Logs 是否有`AccessDenied`錯誤。
+ 輸出金鑰字首不相符 （一般用途 Amazon S3 儲存貯體） – 如果您的`s3:PutObject`許可範圍限定為 等字首`arn:aws:s3:::my-bucket/data*`，則輸出金鑰範本產生的金鑰必須以 開頭`data/`。不相符會導致每個寫入遭拒。
+ 缺少資料表許可 （串流資料表） – 當您使用客戶受管 AWS KMS 金鑰加密目的地資料表時，除了其他`s3tables`動作`s3tables:PutTableEncryption`之外，還要驗證服務執行角色是否包含 。如果沒有它， 會`CreateTable`成功，但資料表加密會失敗、資料表永遠不會建立，也不會交付任何資料。
+ 缺少記錄許可 – 如果服務執行角色缺少 `logs:CreateLogStream`和 `logs:PutLogEvents`，則 CloudWatch Logs 中不會記錄交付失敗，這可能會使許可問題顯示為無提示失敗。當沒有日誌時，請先驗證記錄許可。
+ 建立後沒有新資料 – 交付不會從串流回填現有資料。只有交付成為 ACTIVE 之後寫入的記錄才會交付。

## 交付已暫停
<a name="troubleshooting-suspended"></a>

 當目的地無法使用或不相容時，交付會進入暫停狀態。常見原因：
+ Apache Iceberg 目的地資料表上的串流資料表已刪除。
+ Amazon S3 儲存貯體擁有者不符合預期的帳戶 （擁有者不相符）。
+ 在目的地資料表上偵測到不相容的分割區資料欄。

 暫停的交付無法繼續。您必須使用有效的目的地組態建立新的交付。

## CloudWatch Logs 中的許可遭拒錯誤
<a name="troubleshooting-permission-denied"></a>

 `AccessDenied` 交付 CloudWatch Logs 中的錯誤表示許可問題。常見原因：
+ IAM 角色政策已在建立交付之後修改。
+ Amazon S3 儲存貯體政策已變更為拒絕從角色存取。
+ 角色上的信任政策不允許 Kinesis Data Streams 服務擔任該角色。
+  AWS KMS 金鑰政策拒絕加密或解密對交付角色的存取。

 檢閱並更正相關政策，然後驗證交付是否繼續。

## 交付不適用於我的串流
<a name="troubleshooting-not-available"></a>

 串流資料表和 Amazon S3 交付需要 Kinesis Data Streams 串流處於隨需標準或隨需優勢容量模式。如果您的串流使用佈建模式，您必須先將其切換到隨需模式，才能建立交付。

## 結構描述變更後，交付會停止
<a name="troubleshooting-schema-change"></a>

 交付不支援結構描述演變。如果您在建立交付後更新 AWS Glue 結構描述登錄檔中的結構描述，則使用新結構描述版本產生的記錄可能會失敗驗證，並路由至無效字母佇列。

 若要解決此問題：還原生產者的結構描述變更，或刪除現有的交付，並使用更新的結構描述重新建立。

## 無法刪除串流
<a name="troubleshooting-cannot-delete-stream"></a>

 當串流有一或多個作用中交付`ResourceInUseException`時， `DeleteStream`請求會失敗。當交付連接到串流時，無法刪除該串流。

 若要解決此問題：使用 列出串流上的交付 `ListChannels`（使用串流篩選條件），使用 刪除每個交付`DeleteChannel`，然後刪除串流。