本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 的(最好是) AL2Amazon 实例 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
。