View a markdown version of this page

對資料交付進行故障診斷 - Amazon Kinesis Data Streams

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

對資料交付進行故障診斷

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

交付停滯在 CREATING 狀態

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

呼叫 DescribeChannel 以檢查目前的狀態和狀態原因。常見原因包括:

  • 無效的 IAM 角色 ARN 或角色政策中的許可不足。

  • 目的地 Amazon S3 儲存貯體不存在或位於不同區域。

  • 無法解析結構描述登錄檔中的 AWS Glue 結構描述 ARN。

交付處於 FAILED 狀態

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

高資料新鮮度

DataFreshness 指標會測量最舊未交付記錄的存留期。高值表示交付落後於擷取。常見原因:

  • 目的地資料表上的高分割區計數會增加中繼資料額外負荷。

  • 許多小型遞交的資料表中繼資料成長會降低遞交輸送量。

  • 低串流輸送量結合低新鮮度設定會導致頻繁的小型交付。

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

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

失敗的記錄大於零

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

針對 Apache Iceberg 上的串流資料表:

  • 結構描述不相符 – 記錄不符合已註冊的結構描述。

  • 缺少必要欄位 – 不可為空的資料欄在記錄中沒有值。

  • 未使用適用於 GSR_JSON 格式的 AWS Glue 結構描述登錄序列化程式 – 生產者必須使用 AWS Glue 結構描述登錄生產者程式庫。

針對一般用途的 Amazon S3 儲存貯體:

  • 格式不相符 – 記錄格式不符合設定的輸入格式。

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

目的地未顯示任何資料

如果交付處於 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 之後寫入的記錄才會交付。

交付已暫停

當目的地無法使用或不相容時,交付會進入暫停狀態。常見原因:

  • Apache Iceberg 目的地資料表上的串流資料表已刪除。

  • Amazon S3 儲存貯體擁有者不符合預期的帳戶 (擁有者不相符)。

  • 在目的地資料表上偵測到不相容的分割區資料欄。

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

CloudWatch Logs 中的許可遭拒錯誤

AccessDenied 交付 CloudWatch Logs 中的錯誤表示許可問題。常見原因:

  • IAM 角色政策已在建立交付之後修改。

  • Amazon S3 儲存貯體政策已變更為拒絕從角色存取。

  • 角色上的信任政策不允許 Kinesis Data Streams 服務擔任該角色。

  • AWS KMS 金鑰政策拒絕加密或解密對交付角色的存取。

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

交付不適用於我的串流

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

結構描述變更後,交付會停止

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

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

無法刪除串流

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

若要解決此問題:使用 列出串流上的交付 ListChannels(使用串流篩選條件),使用 刪除每個交付DeleteChannel,然後刪除串流。