對 Kafka 事件來源映射錯誤進行疑難排解 - AWS Lambda

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

對 Kafka 事件來源映射錯誤進行疑難排解

下列主題針對您在將 Amazon MSK 或自我管理的 Apache Kafka 與 Lambda 搭配使用時可能遇到的錯誤和問題,提供疑難排解建議。

如需更多疑難排解說明,請造訪 AWS 知識中心

身分驗證和授權錯誤

如果遺失了從 Kafka 叢集取用資料的任何必要許可,Lambda 會在 LastProcessingResult 下的事件來源映射中顯示下列其中一種錯誤訊息。

叢集無法授權 Lambda

對於 SASL/SCRAM 或 mTLS,此錯誤表示提供的使用者不具備下列 Kafka 存取控制清單 (ACL) 的所有許可:

  • DescribeConfigs 叢集

  • 描述群組

  • 讀取群組

  • 描述主題

  • 讀取主題

當您建立具有必要的 kafka-cluster 許可之 Kafka ACL 時,請將主題和群組指定為資源。主題名稱必須與事件來源映射中的主題相符。群組名稱必須與事件來源映射的 UUID 相符。

將必要的許可新增至執行角色後,可能需要數分鐘變更才會生效。

以下是針對此問題啟用記錄組態後的範例 ESM 系統層級日誌:

{ "eventType": "ESM_PROCESSING_EVENT", "timestamp": 1734567890123, "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/12345678-abcd-1234-efgh-EXAMPLE11111-1", "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111/0", "logLevel": "WARN", "error": { "errorMessage": "Not authorized to access topics: [my-topic]", "errorCode": "org.apache.kafka.common.errors.TopicAuthorizationException" } }

SASL 身分驗證失敗

若使用 SASL/SCRAM 或 SASL/PLAIN,此錯誤表示所提供的登入憑證無效。

對於 IAM 存取控制,執行角色缺少叢集的 kafka-cluster:Connect 許可。將此許可新增至角色,並將叢集的 Amazon Resource Name (ARN) 指定為資源。

您可能會間歇性地看到此錯誤發生。TCP 連線數量超過服務配額後,此叢集就會拒絕連線。Lambda 會關閉並重試,直到連線成功為止。Lambda 連接到叢集並輪詢記錄之後,上次處理結果會變更為 OK

以下是在使用 IAM 身分驗證時,針對此問題啟用記錄組態後的範例 ESM 系統層級日誌:

{ "eventType": "ESM_PROCESSING_EVENT", "timestamp": 1734567890456, "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/12345678-abcd-1234-efgh-EXAMPLE22222-1", "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222/0", "logLevel": "WARN", "error": { "errorMessage": "[a1b2c3d4-5678-90ab-cdef-EXAMPLE22222]: Access denied", "errorCode": "org.apache.kafka.common.errors.SaslAuthenticationException" } }

伺服器無法驗證 Lambda

此錯誤表示 Kafka 代理程式無法驗證 Lambda。此狀況的發生原因如下:

  • 您並未提供 mTLS 身分驗證的用戶端憑證。

  • 您已提供用戶端憑證,但並未將 Kafka 代理程式設定為使用 mTLS 身分驗證。

  • 用戶端憑證不受 Kafka 代理程式信任。

Lambda 無法驗證伺服器

此錯誤表示 Lambda 無法驗證 Kafka 代理程式。此狀況的發生原因如下:

  • 對於自我管理的 Apache Kafka:Kafka 代理程式會使用自我簽署憑證或私有 CA,但不會提供伺服器根 CA 憑證。

  • 對於自我管理的 Apache Kafka:伺服器根 CA 憑證與簽署代理程式憑證的根 CA 不相符。

  • 主機名稱驗證失敗,因為代理程式的憑證不包含代理程式做為主體替代名稱的 DNS 名稱或 IP 地址。

提供的憑證或私有金鑰無效

此錯誤表示 Kafka 取用者無法使用提供的憑證或私有金鑰。請確定憑證和金鑰使用 PEM 格式,且私有金鑰加密使用 PBES1 演算法。

以下是針對此問題啟用記錄組態後的範例 ESM 系統層級日誌:

{ "eventType": "ESM_PROCESSING_EVENT", "timestamp": 1734567891234, "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLE44444", "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/12345678-abcd-1234-efgh-EXAMPLE44444-1", "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE44444/0", "logLevel": "WARN", "error": { "errorMessage": "Invalid PEM keystore configs", "errorCode": "org.apache.kafka.common.errors.InvalidConfigurationException" } }

網路和連線錯誤

網路組態問題可防止 Lambda 連線至 Kafka 叢集。下列主題說明常見的網路相關錯誤。

安全群組組態導致連線逾時

如果與 Kafka 叢集相關聯的安全群組不允許來自本身的傳入流量,則 Lambda 無法連線至叢集。確定安全群組的傳入規則允許來自 Kafka 代理程式連接埠上安全群組本身的流量。

以下是針對此問題啟用記錄組態後的範例 ESM 系統層級日誌:

{ "eventType": "ESM_PROCESSING_EVENT", "timestamp": 1734567892345, "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLE55555", "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/12345678-abcd-1234-efgh-EXAMPLE55555-1", "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE55555/0", "logLevel": "WARN", "error": { "errorMessage": "Timeout expired while fetching topic metadata", "errorCode": "org.apache.kafka.common.errors.TimeoutException" } }

您也可以檢查 Kafka 消費者 INFO 日誌,以驗證連線和網路組態。brokerEndpoints 欄位顯示 Kafka 代理程式地址,securityProtocolsaslMechanism(如果適用) 顯示身分驗證方法,而 networkConfig 欄位顯示事件來源映射所使用的 IP 地址、子網路 CIDR 區塊和安全群組。確認列出的安全群組允許必要的傳入流量:

{ "eventType": "POLLER_STATUS_EVENT", "timestamp": 1734567892456, "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE-1", "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/0", "logLevel": "INFO", "kafkaEventSourceConnection": { "brokerEndpoints": "boot-abcd1234.c2.kafka-serverless.us-east-1.amazonaws.com:9098", "consumerId": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE-0", "topics": [ "my-topic" ], "consumerGroupId": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "securityProtocol": "SASL_SSL", "saslMechanism": "AWS_MSK_IAM", "totalPartitionCount": 2, "assignedPartitionCount": 2, "partitionsAssignmentGeneration": 1, "assignedPartitions": [ "my-topic-0", "my-topic-1" ], "networkConfig": { "ipAddresses": [ "10.0.0.37" ], "subnetCidrBlock": "10.0.0.32/28", "securityGroups": [ "sg-0123456789abcdef0" ] } } }

無法解析 Kafka 代理程式端點

此錯誤表示 Kafka 叢集不存在或已刪除。確認事件來源映射中指定的叢集存在且處於作用中狀態。

以下是針對此問題啟用記錄組態後的範例 ESM 系統層級日誌:

{ "eventType": "ESM_PROCESSING_EVENT", "timestamp": 1734567893456, "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLE66666", "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/12345678-abcd-1234-efgh-EXAMPLE66666-1", "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE66666/0", "logLevel": "WARN", "error": { "errorMessage": "No resolvable bootstrap urls given in bootstrap.servers", "errorCode": "org.apache.kafka.common.config.ConfigException" } }

事件來源映射錯誤

當您將 Apache Kafka 叢集新增為 Lambda 函數的事件來源時,如果您的函數遇到錯誤,則您的 Kafka 取用者會停止處理記錄。主題分割區的取用者是訂閱、讀取和處理記錄者。您的其他 Kafka 取用者可以繼續處理記錄,只要他們沒有遇到相同的錯誤。

若要確定停止取用者的原因,請檢查 EventSourceMapping 的回應中的 StateTransitionReason 欄位。下列清單說明了您可能收到的事件來源錯誤:

ESM_CONFIG_NOT_VALID

事件來源映射組態無效。

EVENT_SOURCE_AUTHN_ERROR

Lambda 無法驗證事件來源。

EVENT_SOURCE_AUTHZ_ERROR

Lambda 沒有存取事件來源所需的許可。

FUNCTION_CONFIG_NOT_VALID

函數組態無效。

注意

如果您的 Lambda 事件記錄超過允許的 6 MB 大小限制,則可能不會進行處理。