如何排除在尝试使用 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: 找不到任何实现 Connector 且名称匹配的类……
  • 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(或 AWS_SECRET_ACCESS_KEY))

解决方法

连接器代码报错: UnknownError.UnknownMessage: 最后一次操作失败。重试该操作。

当 MSK Connect 无法创建连接器并且连接器已转为“失败”状态时,就会出现此错误。

要找到失败的根本原因,请查看 MSK Connect 的日志事件。MSK Connect 会写入日志事件,您可以通过这些日志调试连接器。创建连接器时,可以指定零日志目标或以下日志目标之一:

  • Amazon CloudWatch logs
  • 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 字符。将所有 CRLF 字符("\r\n")替换为 LF 字符("\n")。

无效参数 serviceExecutionRoleArn: 服务关联角色 ARN 不能作为服务执行角色 ARN 提供。

当您使用一个与服务相关的角色创建连接器时,就会出现此错误。MSK Connect 不支持使用与服务相关的角色作为服务执行角色。必须创建单独的服务执行角色。有关如何创建自定义 AWS Identity and Access Management(IAM)角色的说明,请参阅创建向 AWS 服务委派权限的角色。指定您希望连接器使用的角色。此角色必须不同于服务内部用于创建连接器资源的服务相关角色 AWSServiceRoleForKafkaConnect

org.apache.kafka.connect.errors.ConnectException: 找不到任何实现 Connector 且名称匹配的类……

要解决此错误,请尝试以下故障排除步骤:

  • 删除连接器配置中可能存在的所有回车符(/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 Worker 配置中,将 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 S3 的 Amazon Virtual Private Cloud(Amazon VPC)端点。要创建从集群的 VPC 到 Amazon S3 的 Amazon VPC 端点,请完成以下步骤:

  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 到 Kinesis Data Firehose 的 Amazon VPC 端点。

要创建从集群的 VPC 到 Kinesis Data Firehose 的 Amazon VPC 端点,请按照上一节中的步骤操作。使用服务名称筛选器 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(或 AWS_SECRET_ACCESS_KEY))

当您用来创建连接器的 IAM 角色没有所需权限时,就会出现此错误。

查看您用于访问 Amazon MSK 的连接器的 IAM 角色的访问策略和信任关系。有关更多信息,请参阅服务执行角色

相关信息

如何使用 Kafka-Kinesis-Connector 连接我的 Amazon MSK 集群?

MSK 连接

对您的 Amazon MSK 集群进行故障排除

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