本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
MSK As Source 问题排查
本节介绍了使用 MSK As Source 时常见的问题排查步骤
注意
有关处理、转换或 S3 交付问题的排查,请参阅前面的部分
hose 创建失败
如果使用 MSK As Source 的 hose 创建失败,请检查以下各项:
-
检查源 MSK 集群是否处于活动状态。
-
如果您使用的是私有连接,请确保集群上的私有链接已打开。
如果您使用的是公有连接,请确保集群上的公开访问已打开。
-
如果您使用的是私有连接,请确保添加基于资源的策略,该策略允许 Firehose 创建私有链接。另请参阅:MSK 跨账户权限。
-
确保源配置中的角色有权限从集群的主题中摄取数据。
-
确保您的 VPC 安全组允许传入流量经过集群引导服务器使用的端口。
hose 暂停
如果您的 hose 处于暂停状态,请检查以下各项
-
检查源 MSK 集群是否处于活动状态。
-
检查源主题是否存在。如果主题被删除并重新创建,则还必须删除并重新创建 Firehose 流。
hose 反压
当超过 BytesPerSecondLimit 每个分区或者正常的传送流程缓慢或停止时,的值 DataReadFromSource.Backpressured 将为 1。
-
如果你点击了, BytesPerSecondLimit 请检查 DataReadFromSource.Bytes 指标并申请提高限额。
-
检查日 CloudWatch 志、目标指标、数据转换指标和格式转换指标以确定瓶颈。
数据新鲜度不正确
数据新鲜度似乎不正确
-
Firehose 根据使用记录的时间戳来计算数据新鲜度。为了确保在将生产者记录保留在 Kafka 的代理日志中时正确记录此时间戳,请将 Kafka 主题时间戳类型配置设置为
message.timestamp.type=LogAppendTime。
MSK 集群连接问题
以下过程说明了如何验证与 MSK 集群的连接。有关设置 Amazon MSK 客户端的详细信息,请参阅 Amazon Managed Streaming for Apache Kafka Developer Guide 中的 Getting started using Amazon MSK。
要验证与 MSK 集群的连接
创建一个 Unix-based (最好是 AL2)亚马逊 EC2 实例。如果您在集群上仅启用了 VPC 连接,则请确保您的 EC2 实例在同一 VPC 中运行。一旦实例可用,SSH 连接到该实例。有关更多信息,请参阅《Amazon EC2 用户指南》中的本教程。
通过运行以下命令,使用 Yum 软件包管理器安装 Java。有关更多信息,请参阅《Amazon Corretto 8 用户指南》中的安装说明。
sudo yum install java-1.8.0通过运行以下命令安装 Amazon 客户端
。 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install运行以下命令下载 Apache Kafka 客户端 2.6* 版本。
wget https://archive.apache.org/dist/kafka/2.6.2/kafka_2.12-2.6.2.tgz tar -xzf kafka_2.12-2.6.2.tgz-
转到
kafka_2.12-2.6.2/libs目录,然后运行以下命令以下载 Amazon MSK IAM JAR 文件。wget https://github.com/aws/aws-msk-iam-auth/releases/download/v1.1.3/aws-msk-iam-auth-1.1.3-all.jar -
在 Kafka bin 文件夹中创建
client.properties文件。 -
将
awsRoleArn替换为您在 FirehoseSourceConfiguration中使用的角色 ARN,然后验证证书位置。允许您的 Amazon 客户用户代入角色awsRoleArn。 Amazon 客户端用户将尝试代入您在此处指定的角色。[ec2-user@ip-xx-xx-xx-xx bin]$ cat client.properties security.protocol=SASL_SSL sasl.mechanism=AWS_MSK_IAM sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required awsRoleArn="<role arn>" awsStsRegion="<region name>"; sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler awsDebugCreds=true ssl.truststore.location=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.amzn2.0.1.x86_64/jre/lib/security/cacerts ssl.truststore.password=changeit 运行以下 Kafka 命令以列出主题。如果您的连接是公共的,则请使用公共端点 Bootstrap 服务器。如果您的连接是私有的,则请使用私有端点 Bootstrap 服务器。
bin/kafka-topics.sh --list --bootstrap-server<bootstrap servers>--command-config bin/client.properties如果请求成功,则您应该会看到类似于以下示例的输出。
[ec2-user@ip-xx-xx-xx-xx kafka_2.12-2.6.2]$ bin/kafka-topics.sh --list --bootstrap-server<bootstrap servers>--command-config bin/client.properties [xxxx-xx-xx 05:49:50,877] WARN The configuration 'awsDebugCreds' was supplied but isn't a known config. (org.apache.kafka.clients.admin.AdminClientConfig) [xxxx-xx-xx 05:49:50,878] WARN The configuration 'ssl.truststore.location' was supplied but isn't a known config. (org.apache.kafka.clients.admin.AdminClientConfig) [xxxx-xx-xx 05:49:50,878] WARN The configuration 'sasl.jaas.config' was supplied but isn't a known config. (org.apache.kafka.clients.admin.AdminClientConfig) [xxxx-xx-xx 05:49:50,878] WARN The configuration 'sasl.client.callback.handler.class' was supplied but isn't a known config. (org.apache.kafka.clients.admin.AdminClientConfig) [xxxx-xx-xx 05:49:50,878] WARN The configuration 'ssl.truststore.password' was supplied but isn't a known config. (org.apache.kafka.clients.admin.AdminClientConfig) [xxxx-xx-xx 05:50:21,629] WARN [AdminClient clientId=adminclient-1] Connection to node... __amazon_msk_canary __consumer_offsets如果您在运行之前的脚本时遇到任何问题,则请验证您所提供的引导服务器是否可以通过指定端口访问。为执行此操作,您可以下载并使用 telnet 或类似的实用程序,如以下命令所示。
sudo yum install telnet telnet<bootstrap servers><port>如果请求成功,您将获得以下输出。这意味着您可以连接到本地 VPC 中的 MSK 集群,且引导服务器在指定端口上运行正常。
Connected to ..如果请求不成功,则请检查您的 VPC 安全组上的入站规则。例如,您可以在入站规则上使用以下属性。
Type: All traffic Port: Port used by the bootstrap server (e.g. 14001) Source: 0.0.0.0/0如上一步所示,重试 telnet 连接。如果您仍然无法连接或 Firehose 连接仍然失败,则请联系 Amazon Support
。