Lambda 如何處理來自串流和佇列型事件來源的記錄 - AWS Lambda

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

Lambda 如何處理來自串流和佇列型事件來源的記錄

事件來源對應是 Lambda 資源,可從串流和以佇列為基礎的服務讀取項目,並叫用含有大量記錄的函數。下列服務會使用事件來源對應來叫用 Lambda 函數:

警告

Lambda 事件來源對應至少處理每個事件一次,並且可能會重複處理記錄。為了避免與重複事件相關的潛在問題,我們強烈建議您將函數代碼設為冪等。若要深入了解,請參閱 AWS 知識中心如何讓 Lambda 函數具有冪等性

事件來源對應與直接觸發程式有何不同

某些 AWS 服務可以使用觸發器直接叫用 Lambda 函數。這些服務會將事件推送至 Lambda,並在指定的事件發生時立即叫用函數。觸發器適用於離散事件和即時處理。當您使用 Lambda 主控台建立觸發器時,主控台會與對應的 AWS 服務互動,以便在該服務上設定事件通知。觸發程序實際上是由產生事件的服務儲存和管理,而不是由 Lambda 進行管理。以下是一些使用觸發程序來叫用 Lambda 函數的服務範例:

事件來源對應是在 Lambda 服務中建立和管理的 Lambda 資源。事件來源對映專為處理大量串流資料或佇列中的訊息而設計。以批次方式處理串流或佇列中的記錄比個別處理記錄更有效率。

批次處理行為

根據預設,事件來源映射會將記錄批次處理到 Lambda 傳送給函數的單個承載中。若要微調批次處理行為,您可以設定批次處理視窗 (MaximumBatchingWindowInSeconds) 和批次大小 ()。BatchSize批次間隔是將記錄收集到單一承載的最長時間。批次大小是單一批次中記錄的最大數目。當下列三個條件之一成立時,Lambda 會調用您的函數:

  • 批次間隔達到其最大值。預設的批次處理視窗行為會根據特定的事件來源而有所不同。

    • 對於 Kinesis、DynamoDB 和 Amazon SQS 事件來源:預設的批次處理視窗為 0 秒。這表示 Lambda 會在記錄可用時立即叫用您的函數。若要設定批次化視窗,請進行設定MaximumBatchingWindowInSeconds。您可以將此參數設定為 0 到 300 秒之間的任何值,以 1 秒為增量。如果您設定批次處理視窗,則下一個視窗會在前一個函數呼叫完成後立即開始。

    • 對於 AmazonMSK,自我管理的阿帕奇卡夫卡,Amazon MQ 和 Amazon DocumentDB 事件來源:默認批處理窗口為 500 毫秒。您可以將 MaximumBatchingWindowInSeconds 設定為從 0 秒到 300 秒之間的任意值,增量為秒。一旦第一條記錄到達,批次間隔就會開始。

      注意

      因為您只能以秒為單MaximumBatchingWindowInSeconds位變更,因此在變更之後,您無法還原為 500 毫秒預設批次處理視窗。要恢復預設批次間隔,必須建立新的事件來源映射。

  • 已滿足批次大小。批次大小下限為 1。預設和最大批次大小取決於事件來源。如需有關這些值的詳細資訊,請參閱CreateEventSourceMappingAPI作業的BatchSize規格。

  • 承載大小達到 6 MB您無法修改此限制。

下圖說明了這三種情況。假設批次間隔從第 t = 7 秒開始。在第一種情況下,批次間隔在累積 5 條記錄後在第 t = 47 秒達到其最大值 40 秒。在第二種情況下,批次大小在批次間隔到期之前達到 10,因此批次間隔提前結束。在第三種情況下,承載大小在批次間隔到期之前達到最大值,因此批次間隔提前結束。

批次處理視窗在達到最大時間、達到批次大小或裝載命中 6 MB 時到期

我們建議您使用不同的批次和記錄大小進行測試,以便將每個事件來源的輪詢頻率調整為函數完成其工作的速度。該CreateEventSourceMapping BatchSize 參數控制每次調用可以發送到函數的最大記錄數。更大的批次大小通常會更有效吸收更大集合的記錄的呼叫成本,增加您的傳輸量。

在傳送下一個批次進行處理之前,Lambda 不會等待任何已設定的擴充功能完成。換句話說,當 Lambda 處理下一批記錄時,您的擴充功能可能會繼續執行。如果您違反任何帳戶的 並行 設定或限制,便可能會產生限流的問題。若要偵測此是否為潛在問題,請監控您的函數,並確認您看到的 並行指標 是否高於事件來源映射的預期值。由於兩次調用之間的時間很短,Lambda 可能會短暫報告比碎片數目更高的並行用量。即使對於沒有延伸項目的 Lambda 函數也可能如此。

根據預設,如果您的函數傳回錯誤,則事件來源映射會重新處理整個批次,直到函數成功,或批次中的項目過期為止。若要確保依序處理,事件來源映射會暫停處理受影響的碎片,直到錯誤解決為止。針對串流來源 (DynamoDB 和 Kinesis),您可以設定函數傳回錯誤時 Lambda 重試的次數上限。導致批次未抵達函數的服務錯誤或限流不會計入重試嘗試次數。您也可以設定事件來源對應,以便在捨棄事件批次時,將叫用記錄傳送至的地。

事件來源對映 API

若要使用 AWS Command Line Interface (AWS CLI) 或管理事件來源 AWS SDK,您可以使用下列API操作: