

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# MSK As Source 问题排查
<a name="msk_troubleshooting"></a>

本节介绍了使用 MSK As Source 时常见的问题排查步骤

**注意**  
有关处理、转换或 S3 交付问题的排查，请参阅前面的部分

## hose 创建失败
<a name="hose-creation-fails"></a>

如果使用 MSK As Source 的 hose 创建失败，请检查以下各项：
+ 检查源 MSK 集群是否处于活动状态。
+ 如果您使用的是私有连接，请确保[集群上的私有链接已打开](https://docs.amazonaws.cn/msk/latest/developerguide/aws-access-mult-vpc.html)。

  如果您使用的是公有连接，请确保[集群上的公开访问已打开](https://docs.amazonaws.cn/msk/latest/developerguide/public-access.html)。
+ 如果您使用的是私有连接，请确保添加[基于资源的策略，该策略允许 Firehose 创建私有链接](controlling-access.md#access-to-msk)。另请参阅：[MSK 跨账户权限](https://docs.amazonaws.cn/msk/latest/developerguide/mvpc-cross-account-permissions.html)。
+ 确保源配置中的角色有[权限从集群的主题中摄取数据](controlling-access.md#firehose-assume-role)。
+ 确保您的 VPC 安全组允许传入流量经过[集群引导服务器使用的端口](https://docs.amazonaws.cn/msk/latest/developerguide/port-info.html)。

## hose 暂停
<a name="hose-suspended"></a>

如果您的 hose 处于暂停状态，请检查以下各项
+ 检查源 MSK 集群是否处于活动状态。
+ 检查源主题是否存在。如果主题被删除并重新创建，则还必须删除并重新创建 Firehose 流。

## hose 反压
<a name="hose-backpressured"></a>

当超过 BytesPerSecondLimit 每个分区或者正常的传送流程缓慢或停止时， DataReadFromSource.Backpressured 的值将为 1。
+ 如果你点击了， BytesPerSecondLimit 请检查 DataReadFromSource .Bytes 指标并请求提高限制。
+ 检查日 CloudWatch 志、目标指标、数据转换指标和格式转换指标以确定瓶颈。

## 数据新鲜度不正确
<a name="high-datafreshness"></a>

数据新鲜度似乎不正确
+ Firehose 根据使用记录的时间戳来计算数据新鲜度。为了确保在将生产者记录保留在 Kafka 的代理日志中时正确记录此时间戳，请将 Kafka 主题时间戳类型配置设置为 `message.timestamp.type=LogAppendTime`。

## MSK 集群连接问题
<a name="msk-cluster-connection"></a>

以下过程说明了如何验证与 MSK 集群的连接。有关设置 Amazon MSK 客户端的详细信息，请参阅 *Amazon Managed Streaming for Apache Kafka Developer Guide* 中的 [Getting started using Amazon MSK](https://docs.amazonaws.cn/msk/latest/developerguide/getting-started.html)。

**要验证与 MSK 集群的连接**

1. 创建基于 Unix（最好是 AL2）的 Amazon EC2 实例。如果您在集群上仅启用了 VPC 连接，则请确保您的 EC2 实例在同一 VPC 中运行。一旦实例可用，SSH 连接到该实例。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[本教程](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/EC2_GetStarted.html)。

1. 通过运行以下命令，使用 Yum 软件包管理器安装 Java。有关更多信息，请参阅《Amazon Corretto 8 用户指南》中的[安装说明](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/EC2_GetStarted.html)。

   ```
   sudo yum install java-1.8.0
   ```

1. 通过运行以下命令安装 [Amazon 客户端](https://www.amazonaws.cn/cli/)。

   ```
   curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
   unzip awscliv2.zip
   sudo ./aws/install
   ```

1. 运行以下命令下载 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
   ```

1. 转到 `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
   ```

1. 在 Kafka bin 文件夹中创建 `client.properties` 文件。

1. 将 `awsRoleArn` 替换为您在 Firehose `SourceConfiguration` 中使用的角色 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
   ```

1. 运行以下 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
   ```

1. 如果您在运行之前的脚本时遇到任何问题，则请验证您所提供的引导服务器是否可以通过指定端口访问。为执行此操作，您可以下载并使用 **telnet** 或类似的实用程序，如以下命令所示。

   ```
   sudo yum install telnet
   telnet {{<bootstrap servers>}}{{<port>}}
   ```

   如果请求成功，您将获得以下输出。这意味着您可以连接到本地 VPC 中的 MSK 集群，且引导服务器在指定端口上运行正常。

   ```
   Connected to ..
   ```

1. 如果请求不成功，则请检查您的 VPC [安全组](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/security-group-rules.html)上的入站规则。例如，您可以在入站规则上使用以下属性。

   ```
   Type: All traffic
   Port: Port used by the bootstrap server (e.g. 14001)
   Source: 0.0.0.0/0
   ```

   如上一步所示，重试 **telnet** 连接。如果您仍然无法连接或 Firehose 连接仍然失败，则请联系 [Amazon Support](https://www.amazonaws.cn/contact-us/)。