為什麼 DynamoDB 串流的 Lambda IteratorAge 指標在增加?

1 分的閱讀內容
0

AWS Lambda 從 Amazon DynamoDB Streams 取用記錄時,我看到 Lambda 的 IteratorAge 指標出現峰值。

簡短說明

Lambda IteratorAge 指標會測量從記錄新增至 DynamoDB 串流與函數處理該記錄之間的延遲。IteratorAge 增加表示 Lambda 無法有效處理寫入 DynamoDB 串流的記錄。

IteratorAge 可能因以下原因增加:

  • 調用錯誤
  • 限流發生
  • Lambda 輸送量低

解決方案

調用錯誤

Lambda 的設計目的是依序處理批次記錄,然後在發生錯誤時重試。如果每次調用函數都傳回錯誤,則 Lambda 會持續重試直到記錄過期。或者,Lambda 會持續重試,直到超過您在事件來源映射上設定的最長存在時間。DynamoDB 串流的保留期為 24 小時。Lambda 會持續重試最多一天。之後,它會繼續處理下一批記錄。

若要確認是否是 IteratorAge 出現峰值的根本原因,請檢查 Lambda 錯誤指標。如果原因是調用錯誤,請檢查 Lambda 日誌來偵錯錯誤,然後修改程式碼。處理錯誤時,請務必在程式碼中包含 try-catch 陳述式。

事件來源映射組態有三個參數可協助您防止 IteratorAge 出現峰值:

  • **重試次數:**此參數設定在函數返回錯誤時,Lambda 重試的最大次數。
  • **記錄的最長存在時間:**此參數設定 Lambda 傳送到您的函數之記錄最長存在時間。使用此參數來協助您捨棄過舊的記錄。
  • **錯誤時分割批次:**此參數可協助您用較小的批次重試,以隔離錯誤的記錄並解決逾時問題。函數傳回錯誤時,先分割批次再重試。
    注意: 分割批次不會計入重試配額。

若要保留已捨棄的事件,請設定事件來源映射,以將失敗批次的詳細資訊傳送到 Amazon Simple Queue Service (Amazon SQS) 佇列。或者,設定事件來源映射以將詳細資訊傳送到 Amazon Simple Notification Service (Amazon SNS) 主題。若要執行此操作,請使用 On-failure destination 參數。

限流發生次數

由於事件記錄是依序讀取的,如果目前調用遭限流,則 Lambda 函數無法進入下一個記錄。

使用 DynamoDB Streams 時,不要在同一個串流碎片上設定超過兩個取用者。如果在一個碎片上有超過兩個取用者,則系統可能會將函數限流。如需詳細資訊,請參閱讀取和處理串流

如果您在單一串流碎片上需要超過兩個取用者,則請使用扇出模式。設定 Lambda 函數以取用來自串流的記錄,然後將其轉送至其他下游 Lambda 函數或 Amazon Kinesis 串流。針對 Lambda,使用並行限制來防止限流。

Lambda 輸送量

執行時期持續時間

如果 Lambda 函數的持續時間指標很高,函數的輸送量會下降,而且 IteratorAge 會增加。

若要減少函數的執行時期持續時間,請執行下列其中一種或兩種方法:

並行的 Lambda 執行

並行的 Lambda 執行最大次數計算如下:

並行執行 = 每個碎片的碎片數 x 並行批次 (平行化因子)

  • **碎片數量:**在 DynamoDB 串流中,資料表的分區數量與串流碎片數量是一對一對應的。資料表的大小和資料表的輸送量會決定分區的數量。資料表上的每個分區最多可提供 3,000 個讀取請求單位或 1,000 個寫入請求單位,或兩者的線性組合。若要增加並行,請提高資料表的佈建容量來增加碎片數量。
  • **每個碎片的並行批次 (平行化因子):**您可以在事件來源映射中設定每個碎片的並行批次數量。預設值是 1,最多可增加至 10

例如,如果資料表有 10 個分區,且每個碎片的並行批次設定為 5,則您最多可以有 50 個並行執行。

注意:若要在任何時間點以正確的順序處理項目層級的修改,具有相同分區索引鍵的項目會進入同一批次。請確保資料表分區索引鍵具有高基數,而且流量不會產生熱鍵。例如,如果您將每個碎片的並行批次值設定為 10,而您的寫入流量針對單一分區索引鍵,則每個碎片只能有一個並行執行。

批次大小

若要協助提升 Lambda 的輸送量,請調整批次大小的值。如果每個批次處理的記錄數量較少,則串流處理速度會變慢。如果每個批次的記錄數量很多,則函數執行的持續時間可能會增加。為了找到適合您使用案例的最佳值,最佳實務是使用多個值測試批次大小。

如果函數的執行時期持續時間與事件中的記錄數無關,則增加函數的批次大小會降低函數的迭代器期限。

相關資訊

將 AWS Lambda 與 Amazon DynamoDB 搭配使用

AWS 官方
AWS 官方已更新 3 個月前