如何对无法向 Amazon MSK 主题发送消息的 AWS IoT 规则进行故障排除?
我想对无法向 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 主题发送消息的 AWS IoT Core 规则进行故障排除。
简短描述
当 AWS IoT 规则无法向 Amazon MSK 集群发布消息时,您可能会收到以下错误消息之一:
- “KafkaAction failed to send a message to the specified bootstrap servers.Topic <topic_name> not present in metadata after 1000 ms.(KafkaAction 未能向指定的引导服务器发送消息。1000 毫秒后元数据中不存在主题 <topic_name>。)”
- “KafkaAction failed to send a message to the specified bootstrap servers.SSL handshake failed.(KafkaAction 未能向指定的引导服务器发送消息。SSL 握手失败。)”
- “KafkaAction failed to send a message to the specified bootstrap servers.An unknown error occurred.(KafkaAction 未能向指定的引导服务器发送消息。发生未知错误。)”
- “KafkaAction failed to send a message to the specified bootstrap servers.No resolvable bootstrap urls given in bootstrap.servers.(KafkaAction 未能向指定的引导服务器发送消息。bootstrap.servers 中没有给出可解析的引导 URL。)”
解决方法
在开始进行故障排除之前,请完成以下步骤:
- 在与 AWS IoT 规则相同的 AWS 区域中配置 AWS IoT 日志记录。
- 验证 AWS IoT 规则和 Amazon MSK 集群的设置。有关详细信息,请参阅步骤 3.在 AWS Cloud9 上设置 Kafka 生产者和使用者以测试设置(现场备注: 使用 IoT 规则操作将消息传送到 Amazon Managed Streaming for Apache Kafka)。
根据您收到的 KafkaAction 错误消息进行故障排除
**注意:**确保使用正确的端口号与客户端计算机通信。
错误: KafkaAction failed to send a message to the specified bootstrap servers.Topic not present in metadata after 1000 ms.(KafkaAction 未能向指定的引导服务器发送消息。1000 毫秒后元数据中不存在此主题。)
当 AWS IoT Core 无法访问在 Amazon MSK 集群中定义的主题的元数据时,就会出现此错误。要对此错误进行故障排除,请完成以下步骤:
-
检查该主题是否在 Amazon MSK 集群上。
**注意:**将 example-topic-name 替换为您的主题名称。./bin/kafka-topics.sh —list —zookeeper $ZOOKEEPER_STRING | grep example-topic-name
-
检查 AWS IoT 规则配置中是否有引导服务器和 ZooKeeper 的正确连接字符串。您可以在 Amazon MSK 设置中的Client information(客户端信息)页面上找到引导服务器和 ZooKeeper 连接字符串。
-
检查映射到集群的安全组。安全组必须允许从 Amazon Virtual Private Cloud (Amazon VPC) 目标向映射到引导服务器的端口的入站流量。
-
检查 ZooKeeper 的端口是否允许入站流量。ZooKeeper 对 PLAINTEXT 使用端口 2181,对 TLS 加密使用端口 2182。
-
(可选)如果 Amazon VPC 目标和集群不共享相同的 Amazon VPC 和子网,请在您的子网中创建 NAT 网关。这使您可以将消息从 AWS IoT Core 转发到公共 Amazon MSK 集群。有关详细信息,请参阅连接到 Amazon MSK 集群。
-
在与 Amazon MSK 集群相同的子网中启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。
-
检查端口是否已打开:
**注意:**将 example-port-number 替换为端口号。引导:
telnet bootstrap-broker example-port-number
ZooKeeper:
telnet Apache-ZooKeeper-node example-port-number
-
检查附加到 AWS IoT 规则的 AWS Identity and Access Management (IAM) 角色是否具有正确的权限。IAM 角色必须拥有管理 Amazon VPC 中的弹性网络接口的权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeVpcAttribute", "ec2:DescribeSecurityGroups" ], "Resource": "*" } ] }
-
如果 Amazon MSK 集群配置了用户名和密码,请检查权限是否包含在策略中:
{ "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:region:account-id:" }
-
检查信任策略是否允许 AWS IoT Core 代入该角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- (可选)如果您使用客户自主管理型密钥对静态数据进行加密,请确保 IAM 角色拥有正确的权限。IAM 角色必须有权对调用者使用 AWS Key Management Service (AWS KMS) 密钥。在以下示例 IAM 策略中,IAM 角色被授予 AWS KMS 权限:
**注意:**将 example-account-id 替换为您的账户 ID,将 example-iam-role 替换为您的 IAM 角色。
{ "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": [ "AWS": { "arn:aws:iam::example-account-id:example-iam-role", "arn:aws:iam::example-account-id:root" } ], "Action": "kms:*", "Resource": "*" }
- 检查 AWS IoT 规则代入的 IAM 角色是否有权在 IAM 策略中执行 AWS KMS 操作。
- 检查相关分区是否在 Amazon MSK 集群上。如果您只有一个分区 (0),并且 AWS IoT 规则尝试访问分区 (1),则会再次出现错误消息。
错误: KafkaAction failed to send a message to the specified bootstrap servers.SSL handshake failed.(KafkaAction 未能向指定引导服务器发送消息。SSL 握手失败。)
当 Amazon MSK 集群在与 Amazon MSK 集群进行 TLS 握手期间出现问题时,就会出现此错误。如果您收到此错误,则必须使用 AWS Private Certificate Authority (AWS Private CA) 颁发的证书。您可以将 AWS Private CA 证书添加到密钥存储库和 AWS IoT 规则。有关详细信息,请参阅双向 TLS 身份验证。
错误: KafkaAction failed to send a message to the specified bootstrap servers.An unknown error occurred.(KafkaAction 未能向指定引导服务器发送消息。发生未知错误。)
错误: KafkaAction failed to send a message to the specified bootstrap servers.No resolvable bootstrap urls given in bootstrap.servers.(KafkaAction 未能向指定引导服务器发送消息。bootstrap.servers 中没有给出可解析的引导 URL。)
要对这些错误进行故障排除,请完成前面的步骤 1 到 13。如果仍然收到这些错误消息,请逐渐增加发布到 AWS IoT 主题的消息。如果仍然遇到问题,请联系 AWS Support。
相关信息
如何将 AWS IoT Core 与 Amazon MSK 进行集成
向 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 大规模传送数据
相关内容
- 已提问 1 年前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 9 个月前