

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

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

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

如需更多疑難排解說明，請造訪 [AWS 知識中心](https://repost.aws/knowledge-center#AWS_Lambda)。

## 身分驗證和授權錯誤


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

**Topics**
+ [

### 叢集無法授權 Lambda
](#kafka-authorize-errors)
+ [

### SASL 身分驗證失敗
](#kafka-sasl-errors)
+ [

### 伺服器無法驗證 Lambda
](#kafka-mtls-errors-server)
+ [

### Lambda 無法驗證伺服器
](#kafka-mtls-errors-lambda)
+ [

### 提供的憑證或私有金鑰無效
](#kafka-key-errors)

### 叢集無法授權 Lambda


對於 SASL/SCRAM 或 mTLS，此錯誤表示提供的使用者不具備下列 Kafka 存取控制清單 (ACL) 的所有許可：
+ DescribeConfigs 叢集
+ 描述群組
+ 讀取群組
+ 描述主題
+ 讀取主題

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

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

以下是針對此問題啟用[記錄組態](esm-logging.md)後的範例 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-logging.md)後的範例 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-logging.md)後的範例 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 叢集。下列主題說明常見的網路相關錯誤。

**Topics**
+ [

### 安全群組組態導致連線逾時
](#kafka-security-group-errors)
+ [

### 無法解析 Kafka 代理程式端點
](#kafka-cluster-deleted-errors)

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


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

以下是針對此問題啟用[記錄組態](esm-logging.md)後的範例 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-logging.md)後的範例 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 函數的[事件來源](invocation-eventsourcemapping.md)時，如果您的函數遇到錯誤，則您的 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 大小限制，則可能不會進行處理。