我嘗試使用 Amazon MSK Connect 建立連接器而發生錯誤時,如何疑難排解?

3 分的閱讀內容
0

我嘗試使用 Amazon Managed Streaming for Apache Kafka (Amazon MSK) Connect 以建立連接器時,收到錯誤訊息。

簡短說明

您使用 MSK Connect 建立連接器時,可能會收到下列其中一種錯誤訊息:

  • 連接器程式碼發生問題: UnknownError.UnknownMessage: 最後一個操作失敗。再嘗試操作一次。
  • 無效參數 connectorConfiguration: 遺漏下列必要欄位或其中包含無效值:tasks.max
  • 無效參數 serviceExecutionRoleArn: 無法提供服務連結角色 ARN 作為服務執行角色 ARN
  • org.apache.kafka.connect.errors.ConnectException: 找不到任何名稱相符的實作連接器類別...
  • org.apache.kafka.common.errors.TimeoutException: 等待傳送呼叫逾時。呼叫:fetchMetadata
  • org.apache.kafka.common.errors.SaslAuthenticationException: 連線次數太多
  • org.apache.kafka.connect.errors.ConnectException: com.amazonaws.SdkClientException: 無法執行 HTTP 要求: 無法連線至 s3.eu-central-1.amazonaws.com:443 [s3.eu-central-1.amazonaws.com/52.219.47.235 ]:連線逾時
  • org.apache.kafka.connect.errors.ConnectException: com.amazonaws.SdkClientException: 無法執行 HTTP 要求: 無法連線至 firehose.us-east-2.amazonaws.com:443 [firehose.us-east-2.amazonaws.com/52.95.23.168 ]:連線逾時
  • 連線至節點 - 1 (代理程式端點) 驗證失敗,原因: 拒絕存取
  • 錯誤:連線至節點 -3 (b-1.<cluster>.<region>.amazonaws.com/INTERNAL_IP) 驗證失敗,原因: 發生錯誤:(java.security .PrivilegedActionException: javax.security .sasl.SaslException: 找不到 AWS IAM 憑證 [原因:aws_msk_iam_auth_shadow.com.amazonaws.SdkClientException: 無法載入 AWS 憑證 ...........無法從環境變數載入 AWS 憑證(AWS_ACCESS_KEY_ID (或 AWS_ACCESS_KEY) 和 AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY))

解決方法

連接器程式碼發生問題: UnknownError.UnknownMessage: 最後一個操作失敗。再嘗試操作一次。

MSK Connect 無法建立連接器,且連接器變為失敗狀態時,您會收到此錯誤訊息。

要找出失敗的根本原因,檢閱 MSK Connect 的日誌事件。MSK Connect 會寫入日誌事件,供您進行連接器偵錯。建立連接器時,您可以不指定日誌目的地,或指定下列其中一個日誌目的地:

  • Amazon CloudWatch 日誌
  • Amazon Simple Storage Service (Amazon S3)
  • Amazon Kinesis Data Firehose

無效參數 connectorConfiguration: 遺漏下列必要欄位或其中包含無效值:tasks.max

如果在組態的尾端使用歸位 (/r) 字元,則您會收到下列錯誤:

Invalid parameter connectorConfiguration: The following required field is missing or has invalid value: tasks.max

要解決此錯誤,嘗試下列疑難排解步驟:

  • 在連接器組態對話方塊,手動輸入組態資訊,而不是從文件等其他來源,複製貼上資訊。
  • 如果您使用 Windows 作業系統,則使用文字編輯器 (例如 Notepad++)。您可以使用文字編輯器以檢查並移除歸位字元 (CRLF) 及任何行尾 (EOL) 字元。要移除歸位字元,複製組態並貼至文字編輯器。從您的文字編輯器,選擇檢視顯示符號。然後,選擇顯示所有字元以檢閱組態中可能存在的任何 CRLF 或 EOL 字元。使用 LF 字元 ("\n"),取代所有 CRLF 字元 ("\r\n")。

無效參數 serviceExecutionRoleArn: 無法提供服務連結角色 ARN 作為服務執行角色 ARN。

您使用服務連結角色以建立連接器時,就會收到此錯誤訊息。MSK Connect 不支援使用 service-linked 角色作為服務執行角色。您必須建立個別的服務執行角色。如需建立自訂 AWS Identity and Access Management (IAM) 角色的指示,請參閱建立角色以將權限委派給 AWS 服務。指定您希望連結器使用的角色。此角色必須與服務內部用於建立連結器資源的 service-linked 角色 AWSServiceRoleForKafkaConnect 不同。

org.apache.kafka.connect.errors.ConnectException: 找不到任何名稱相符的實作連接器類別...

要解決此錯誤,嘗試下列疑難排解步驟:

  • 移除連結器組態中可能存在的任何歸位字元 (/r)。
  • 如果連結器外掛程式需要多個檔案,將這些檔案加入壓縮檔案。建立連接器外掛程式時,會使用壓縮檔案。壓縮檔案的 JAR 檔案也必須為該外掛程式記錄預期的檔案結構。最佳實務是開啟 MSK Connect 日誌並檢閱以確認正確設定檔案結構。

org.apache.kafka.common.errors.TimeoutException: 等待傳送呼叫逾時。呼叫:fetchMetadata

如果連接器無法連線至您的 MSK 叢集,您會收到 TimeOutException 錯誤。要解決此錯誤,嘗試下列疑難排解步驟:

org.apache.kafka.common.errors.SaslAuthenticationException: 連線次數太多

如果您的 MSK 叢集在具備 IAM 存取控制的 kafka.t3.small 代理程式類型執行,注意連線限制kafka.t3.small 執行個體類型只接受每個代理程式每秒一個 TCP 連線。超過連線限制時,建立操作會失敗。因此,您會收到 SaslAuthenticationException 錯誤,表示憑證無效。如需 MSK 叢集和 IAM 存取控制的詳細詳細資訊,請參閱 Amazon MSK 如何搭配 IAM 使用

要解決 SaslAuthenticationException 錯誤,請執行下列其中一項動作:

  • 在您的 MSK Connect 工作組態,將 reconnect.backoff.msreconnect.backoff.max.ms 的值更新為「1000」或更高的值。
  • 升級到更大的代理程式執行個體類型 (例如 kafka.m5.large 或更高)。如需 Amazon MSK 代理程式類型和如何選擇正確代理程式類型的詳細資訊,請參閱代理程式類型適當調整叢集大小

org.apache.kafka.connect.errors.ConnectException: com.amazonaws.SdkClientException: 無法執行 HTTP 要求: 無法連線至 s3.us-east-1.amazonaws.com:443:連線逾時

連接器無法連線至 Amazon S3 時,您會收到此錯誤訊息。要疑難排解此問題,確定您已從叢集的 VPC,將 Amazon Virtual Private Cloud (Amazon VPC) 端點建立到 Amazon S3。要從叢集的 VPC 將 Amazon VPC 端點建立到 Amazon S3,完成下列步驟:

  1. 開啟 Amazon VPC 主控台
  2. 在導覽窗格,選擇端點
  3. 選擇建立端點
  4. 針對服務類別,選擇 AWS 服務
  5. 服務下,選擇服務名稱篩選條件,然後選取 com.amazonaws.<region>.s3。將 <region> 取代為您的 AWS 區域。
    選擇類型篩選條件,然後選擇閘道
  6. 針對 VPC,選取叢集的 VPC。
  7. 路由表下,選取與叢集子網路相關的路由表。
  8. 選擇建立端點

org.apache.kafka.connect.errors.ConnectException: com.amazonaws.SdkClientException: 無法執行 HTTP 要求: 無法連線至 firehose.us-east-2.amazonaws.com:443:連線逾時

連接器無法連線至 Amazon Kinesis Data Firehose 時,您會收到此錯誤訊息。要疑難排解此問題,確定您已從叢集的 VPC 將 Amazon VPC 端點建立到 Kinesis Data Firehose。

要從叢集的 VPC 將 Amazon VPC 端點建立到 Kinesis Data Firehose,遵循前一節的步驟操作。使用服務名稱篩選條件 com.amazonaws.<region>.kinesis-firehose

連線至節點 - 1 (b1.<cluster>.<region>.amazonaws.com) 驗證失敗,原因: 拒絕存取

MSK Connect 的 IAM 使用者沒有建立連接器的必要權限時,您會收到此錯誤訊息。

您使用 MSK Connect 建立連接器時,您必須指定要使用的 IAM 角色。您的服務執行角色必須擁有下列信任政策,以便 MSK Connect 擔任此角色:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Principal": {
            "Service": "kafkaconnect.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
            "StringEquals": {
                "aws:SourceAccount": "Account-ID"
            },
            "ArnLike": {
                "aws:SourceArn": "MSK-Connector-ARN"
            }
        }
    }]
}

如果您想與連接器搭配使用的 MSK 叢集採用 IAM 驗證,則您必須將下列權限政策新增到連接器的服務執行角色:

{
    "Version": "2012-10-17",
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:Connect",
                "kafka-cluster:DescribeCluster"
            ],
            "Resource": [
                "cluster-arn"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:ReadData",
                "kafka-cluster:DescribeTopic"
            ],
            "Resource": [
                "ARN of the topic that you want a sink connector to read from"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:WriteData",
                "kafka-cluster:DescribeTopic"
            ],
            "Resource": [
                "ARN of the topic that you want a source connector to write to"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:CreateTopic",
                "kafka-cluster:WriteData",
                "kafka-cluster:ReadData",
                "kafka-cluster:DescribeTopic"
            ],
            "Resource": [
                "arn:aws:kafka:region:account-id:topic/cluster-name/cluster-uuid/__amazon_msk_connect_*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:AlterGroup",
                "kafka-cluster:DescribeGroup"
            ],
            "Resource": [
                "arn:aws:kafka:region:account-id:group/cluster-name/cluster-uuid/__amazon_msk_connect_*",
                "arn:aws:kafka:region:account-id:group/cluster-name/cluster-uuid/connect-*"
            ]
        }
    ]
}

如需尋找您叢集的 UUID 和建構主題 ARN 的資訊,請參閱資源

錯誤:連線至節點 -3 (b-1.<cluster>.<region>.amazonaws.com/INTERNAL_IP ) 驗證失敗,原因: 發生錯誤:(java.security .PrivilegedActionException: javax.security .sasl.SaslException: 找不到 AWS IAM 憑證 [原因:aws_msk_iam_auth_shadow.com.amazonaws.SdkClientException: 無法載入 AWS 憑證 ...........無法從環境變數載入 AWS 憑證(AWS_ACCESS_KEY_ID (或 AWS_ACCESS_KEY) 和 AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY))

您用於建立連接器的 IAM 角色沒有必要權限時,您會收到此錯誤訊息。

針對您用於存取 Amazon MSK 的連接器,檢閱 IAM 角色的存取政策和信任關係。如需詳細資訊,請參閱服務執行角色

相關資訊

如何使用 Kafka-Kinesis-Connector 連線至我的 Amazon MSK 叢集?

MSK Connect

疑難排解您的 Amazon MSK 叢集

AWS 官方
AWS 官方已更新 1 年前