搭配使用 Lambda 與自我管理 Apache Kafka - AWS Lambda

搭配使用 Lambda 與自我管理 Apache Kafka

本主題說明如何搭配使用 Lambda 與自我管理 Kafka 叢集。在 AWS 術語中,自我管理叢集包含非 AWS 託管的 Kafka 叢集。例如,您可以透過雲端提供者 (例如 Confluent CloudRedpanda) 託管 Kafka 叢集。

本章說明了如何將自我管理的 Apache Kafka 叢集用作 Lambda 函式的事件來源。將自我管理的 Apache Kafka 與 Lambda 整合的一般流程包含以下步驟:

  1. 叢集與網路設定:首先,使用正確的聯網組態設定自我管理的 Apache Kafka 叢集,允許 Lambda 存取叢集。

  2. 事件來源映射設定:接著,建立 Lambda 所需的事件來源映射資源,將 Apache Kafka 叢集安全地連線至函式。

  3. 函式與許可設定:最後,確保函式已正確設定,並且其執行角色具有必要許可。

Apache Kafka 作為事件來源時,其運作方式類似於使用 Amazon Simple Queue Service (Amazon SQS) 或 Amazon Kinesis。Lambda 會在內部輪詢事件來源中的新訊息,然後同步調用目標 Lambda 函數。Lambda 會批次讀取訊息,並將這些訊息作為事件酬載提供給函數。最大批次大小可進行設定 (預設為 100 則訊息)。如需更多詳細資訊,請參閱 批次處理行為

若要最佳化自我管理 Apache Kafka 事件來源映射的輸送量,請設定佈建模式。在佈建模式中,可以定義配置給事件來源映射的事件輪詢器數量下限和上限。這可以提高事件來源映射處理意外訊息尖峰的能力。如需詳細資訊,請參閱佈建模式

警告

Lambda 事件來源映射至少會處理每個事件一次,而且可能會重複處理記錄。為避免與重複事件相關的潛在問題,強烈建議您讓函數程式碼具有等冪性。如需詳細資訊,請參閱 AWS 知識中心中的如何讓 Lambda 函數具有冪等性

對於基於 Kafka 的事件來源,Lambda 支援處理控制參數,例如批次間隔和批次大小。如需更多詳細資訊,請參閱 批次處理行為

如需使用自我管理 Kafka 作為事件來源的範例,請參閱 AWS 運算部落格中的使用自我託管 Apache Kafka 作為 AWS Lambda 的事件來源

範例事件

Lambda 會在調用 Lambda 函數時,在事件參數中傳送訊息批次。事件酬載包含訊息陣列。陣列中的每個項目包含 Kafka 主題和 Kafka 分割區識別符的詳細資訊,以及時間戳記和 base64 編碼的訊息。

{ "eventSource": "SelfManagedKafka", "bootstrapServers":"b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092", "records":{ "mytopic-0":[ { "topic":"mytopic", "partition":0, "offset":15, "timestamp":1545084650987, "timestampType":"CREATE_TIME", "key":"abcDEFghiJKLmnoPQRstuVWXyz1234==", "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "headers":[ { "headerKey":[ 104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101 ] } ] } ] } }