自訂KPL重試次數和速率限制行為 - Amazon Kinesis Data Streams

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

自訂KPL重試次數和速率限制行為

當您使用KPLaddUserRecord()作業新增 Kinesis Producer Library (KPL) 使用者記錄時,系統會為記錄指定時間戳記,並新增至緩衝區,其中包含由RecordMaxBufferedTime組態參數設定的期限。此時間戳記/截止日期的組合設定了緩衝區優先順序。記錄將根據下列條件從緩衝區排清:

  • 緩衝區優先順序

  • 彙整組態

  • 收集組態

影響緩衝區行為的彙整和收集組態參數如下:

  • AggregationMaxCount

  • AggregationMaxSize

  • CollectionMaxCount

  • CollectionMaxSize

然後,清除的記錄會以 Amazon Kinesis 資料串流記錄的形式傳送至您的 Kinesis 資料串流,呼叫 Kinesis 資料串流作業。API PutRecordsPutRecords 操作向串流傳送的請求偶爾會完全失敗或局部失敗。失敗的記錄會自動加回KPL緩衝區。將根據以下兩個值當中較小者設定新的截止日期:

  • 目前 RecordMaxBufferedTime 組態減半

  • 記錄的 time-to-live 價值

此策略允許重試的KPL使用者記錄包含在後續的 Kinesis Data Streams API 呼叫中,以提高輸送量並降低複雜性,同時強制執行 Kinesis Data Streams 記錄的值。 time-to-live 其間不涉及退避演算法,使得此策略成為相對積極的重試策略。因重試次數過多造成的垃圾郵件會受到速率限制的阻止,相關內容將於下一節談論。

速率限制

KPL包括速率限制功能,可限制單一生產者傳送的每個碎片輸送量。速率限制是使用字符儲存貯體演算法搭配用於 Kinesis Data Streams 記錄和位元組的單獨儲存貯體進行實作。每次成功寫入 Kinesis 資料串流都會將一個字符 (或多個字符) 加入各儲存貯體,最多達到特定閾值。此閾值可供設定,但預設情況下設定的值將比實際碎片限額高出 50%,使得來自單一生產者的碎片能夠達到飽和。

您可降低此限制以減少因重試次數過多造成的垃圾郵件。然而,最佳實務是由每個生產者主動重試最大傳輸量,透過擴展串流容量並實作相應的分割區索引鍵策略來處理判定為過多的任何形成調節情況。