跳至內容

如何在 Lambda 函數中對 DynamoDB 串流進行疑難排解?

1 分的閱讀內容
0

我想透過 AWS Lambda 函數使用或對 Amazon DynamoDB 串流進行疑難排解。

解決方案

以下是將 DynamoDB 串流與 Lambda 函數搭配使用時的常見問題:

當 DynamoDB 串流為觸發條件,為什麼我的 Lambda 函數無法擴展?

當您在 DynamoDB 資料表上啟用 DynamoDB 串流時,Amazon DynamoDB 會為每個分割區關聯一個碎片。例えば、DynamoDBテーブルにパーティション数が10あり、そのテーブルでDynamoDBストリームをオンにした場合、10個のシャードがあります。

如果資料表的分割區數量增加,那麼串流的分區數量也會增加。

DynamoDB 資料表的每個分割區最多可處理 3000 個讀取容量單位 (RCU)、1000 個寫入容量單位 (WCU) 以及 10 GB 的資料。超過其中任何一個參數會導致以下情況:

  • 在資料表中新增新的分割區。
  • 在 DynamoDB 串流建立新的分區。

如何控制從 DynamoDB 串流進行的資料處理?

批次大小和批次時間段有助於控制串流的資料處理。

**批次時間段:**設定在叫用之前等待記錄的時間長度。批次時間段可用於控制從 DynamoDB 串流進行的資料處理。請注意,此行為取決於串流內的資料可用性。

批次大小: 設定批次的記錄上限。

除非符合下列條件,否則不會叫用 Lambda 函數:

  • 承載大小達到 6 MB (同步叫用限制)。
  • 批次時間段達到其最大值 (在此範例中為 60 秒)。
  • 批次大小達到其最大值。

平行化因子如何用於加快資料處理速度?

平行化因子透過允許更多並行執行數來快速處理大量記錄。您可以設定平行化因子 (預設值為: 1,最大值為 10),以增加處理的分區數量。啟用平行化因子時,請務必使用隨機或唯一的分割區索引鍵,以達到最高的輸送量。

計算方式: 平行化因子 (每個分區的並行批次)\ * 分區 = 並行執行數

BisectBatchonFunctionError 設定是什麼?

如果 Lambda 函數失敗,則當 BisectBatchonFunctionError 選項設定為 true 時,批次將分為兩部分。然後這些分割批次將進行重試,直到找到問題記錄為止。重試是根據最大重試和記錄存留期設定進行處理。

如果重試嘗試選項設為 0,則不會嘗試對失敗的記錄進行重試。在這種情況下,DynamoDB 串流會捨棄失敗的記錄,或將其傳送至無效字母佇列 (DLQ) (若有設定)。

範例 1

在下面的範例,'p' 代表問題記錄而重試嘗試設定為 0

批次記錄: [1,2,3p,4,5p]

分割 1: [3p,4,5p]

分割 2:[3p] [4,5p] 重試捨棄 [3p],因為它被識別為問題記錄。或者,它會傳送至 DLQ (若有設定)。

分割 3: [4] 已處理。[5p] 已捨棄或被傳送至 DLQ (若有設定)。

範例 2

在下列範例,'x' 代表問題記錄。重試嘗試設定為 -1

插入的批次記錄:[1,2,3x,4,5x]

[3x,4,5x]

[3x,4,5x]

[3x,4,5x]

[3x,4,5x]

為什麼 DynamoDB 串流的 Lambda 的迭代器存留期會增加?

以下是 Lambda 的迭代器存留期增加的常見原因:

  • DynamoDB 串流有不正確的記錄。
  • 對串流進行大量的寫入操作 (PutItemBatchWriteItem)。Lambda 函數可能無法跟上處理高寫入量的速度。如果發生這種情況,請增加 DynamoDB 資料表佈建容量,以增加每 1000 個 WCU 的分割區計數。增加佈建容量會增加並行 Lambda 執行的數量。如需詳細資訊,請參閱當 DynamoDB 串流為觸發條件,為什麼我的 Lambda 函數無法擴展?
  • DynamoDB 分割區的數量減少,例如移轉至新帳戶或新資料表。
  • Lambda 函數中存在限流或函數錯誤。AWS Lambda 會重試記錄,直到整個批次成功處理或記錄的有效期到期為止。此外,DynamoDB 串流的保留期為 24 小時。若要避免資料遺失,最佳做法是設定 DLQ。如果已設定 DLQ,則 AWS Lambda 會在重試完成或記錄保留期到期後,將失敗記錄批次傳送至 DLQ。
    若要解決 Lambda 函數錯誤,請檢查 Amazon CloudWatch Logs以取得錯誤的詳細資訊。
  • Lambda 函數持續時間增加。
  • 您必須最佳化錯誤處理和平行化因子。

如需詳細資訊,請參閱為什麼我的 Lambda 迭代器存留期會增加,以及如何減少它?

AWS 官方已更新 3 年前