本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對 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 代理程式地址,securityProtocol而 saslMechanism(如果適用) 顯示身分驗證方法,而 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 大小限制,則可能不會進行處理。