

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

# 使用 MSK Serverless 集群
<a name="serverless-getting-started"></a>

本教程向您展示了一个示例，说明如何创建 MSK Serverless 集群，创建可以访问该集群的客户端，以及使用客户端在集群上创建主题并向这些主题写入数据。该练习并未提供您在创建无服务器集群时可以选择的所有选项。为了简单起见，我们在本练习的各个部分均选择默认选项。这并不意味着它们是可用于设置无服务器集群的唯一选项。您也可以使用 AWS CLI 或 Amazon MSK API。有关更多信息，请参阅 [Amazon MSK API Reference 2.0](https://docs.aws.amazon.com/MSK/2.0/APIReference/what-is-msk.html)。

**Topics**
+ [创建 MSK Serverless 集群](create-serverless-cluster.md)
+ [为 MSK Serverless 集群上的主题创建 IAM 角色](create-iam-role.md)
+ [创建客户端计算机以访问 MSK Serverless 集群](create-serverless-cluster-client.md)
+ [创建 Apache Kafka 主题](msk-serverless-create-topic.md)
+ [在 MSK Serverless 中生成和使用数据](msk-serverless-produce-consume.md)
+ [删除您为 MSK Serverless 创建的资源](delete-resources.md)

# 创建 MSK Serverless 集群
<a name="create-serverless-cluster"></a>

在此步骤中，您需执行两个任务。首先，使用默认设置创建一个 MSK Serverless 集群。然后，收集有关集群的信息。这是您在后续步骤中创建可向集群发送数据的客户端时所需的信息。

**要创建无服务器集群**

1. 登录并在[https://console.aws.amazon.com/msk/家](https://console.aws.amazon.com/msk/home)中打开 Amazon MSK 控制台。 AWS 管理控制台

1. 选择**创建集群**。

1. 对于**创建方法**，将**快速创建**选项保持为选中状态。**快速创建**选项允许您使用默认设置创建无服务器集群。

1. 对于**集群名称**，输入一个描述性名称，例如 **msk-serverless-tutorial-cluster**。

1. 对于**常规集群属性**，请选择**无服务器**作为**集群类型**。对于其余的**常规集群**属性，使用默认值。

1. 请注意**所有集群设置**下的表。此表列出了网络和可用性等重要设置的默认值，并指明了在创建集群后是否可以更改每项设置。要在创建集群之前更改设置，应在**创建方法**下选择**自定义创建**选项。
**注意**  
使用 MSK Serverless 集群，您最多可以连接五 VPCs 个不同的客户端。为了帮助客户端应用程序在发生中断时切换到另一个可用区，您必须在每个 VPC 中至少指定两个子网。

1. 选择**创建集群**。

**要收集有关集群的信息**

1. 在**集群摘要**部分，选择**查看客户端信息**。在 Amazon MSK 完成集群创建之前，此按钮将一直处于灰色状态。您可能需要等待几分钟直到按钮变为活动状态，然后才能使用。

1. 复制**端点**标签下的字符串。这是您的引导服务器字符串。

1. 选择**属性**选项卡。

1. 在 **“网络设置”** 部分下，复制子网和安全组的并保存它们，因为稍后需要这些信息来创建客户机。 IDs 

1. 选择任意子网。这将打开 Amazon VPC 控制台。查找与子网关联的 Amazon VPC 的 ID。保存此 Amazon VPC ID 以供将来使用。

**下一步**

[为 MSK Serverless 集群上的主题创建 IAM 角色](create-iam-role.md)

# 为 MSK Serverless 集群上的主题创建 IAM 角色
<a name="create-iam-role"></a>

在此步骤中，您需执行两个任务。第一个任务是创建 IAM policy，以授予在集群上创建主题以及向这些主题发送数据的访问权限。第二个任务是创建 IAM 角色并将此策略与其关联。在后面的步骤中，我们将创建代入此角色的客户端计算机，使用它在集群上创建主题并向该主题发送数据。

**创建允许创建主题并写入主题的 IAM policy**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**策略**。

1. 选择**创建策略**。

1. 选择 **JSON** 选项卡，然后将编辑器窗口中的 JSON 替换为以下 JSON。

   在以下示例中，替换以下内容：
   + *region*使用您创建集群的 AWS 区域 位置的代码。
   + 带有您的 ID 的账户 AWS 账户 ID 示例。*123456789012*
   + *msk-serverless-tutorial-cluster*/*c07c74ea-5146-4a03-add1-9baa787a5b14-s3**msk-serverless-tutorial-cluster*以及您的无服务器集群 ID 和主题名称。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "kafka-cluster:Connect",
                   "kafka-cluster:DescribeCluster"
               ],
               "Resource": [
                   "arn:aws:kafka:us-east-1:123456789012:cluster/msk-serverless-tutorial-cluster/c07c74ea-5146-4a03-add1-9baa787a5b14-s3"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kafka-cluster:CreateTopic",
                   "kafka-cluster:WriteData",
                   "kafka-cluster:DescribeTopic"
               ],
               "Resource": [
               "arn:aws:kafka:us-east-1:123456789012:topic/msk-serverless-tutorial-cluster/*"
               ]
           }
       ]
   }
   ```

------

   有关如何写入安全策略的说明，请参阅[IAM 访问控制](iam-access-control.md)。

1. 选择**下一步：标签**。

1. 选择**下一步：审核**。

1. 对于策略名称，输入一个描述性名称，例如 **msk-serverless-tutorial-policy**。

1. 选择**创建策略**。

**创建 IAM 角色并向其附加此策略**

1. 在导航窗格中，选择**角色**。

1. 选择**创建角色**。

1. 在**常见用例**下，选择 **EC2**，然后选择**下一步：权限**。

1. 在搜索框中，输入您之前为本教程创建的策略的名称。然后，选中策略左侧的复选框。

1. 选择**下一步：标签**。

1. 选择**下一步：审核**。

1. 对于角色名称，输入一个描述性名称，例如 **msk-serverless-tutorial-role**。

1. 选择**创建角色**。

**下一步**

[创建客户端计算机以访问 MSK Serverless 集群](create-serverless-cluster-client.md)

# 创建客户端计算机以访问 MSK Serverless 集群
<a name="create-serverless-cluster-client"></a>

在此步骤中，您将执行两个任务。第一项任务是创建一个用作 Apache Kafka 客户端计算机的 Amazon EC2 实例。第二项任务是在计算机上安装 Java 和 Apache Kafka 工具。

**创建客户端计算机**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 选择**启动实例**。

1. 为客户端计算机输入一个描述性**名称**，例如 **msk-serverless-tutorial-client**。

1. 对于**亚马逊机器映像（AMI）类型**，始终选中 **Amazon Linux 2 AMI（HVM）– 内核 5.10，SSD 卷类型**。

1. 保留 **t2.micro** 实例类型为选中状态。

1. 在**密钥对（登录）**下，选择**创建新密钥对**。对于**密钥对名称**，输入 **MSKServerlessKeyPair**。然后，选择 **Download Key Pair (下载密钥对)**。此外，您还可使用现有密钥对。

1. 对于**网络设置**，选择**编辑**。

1. 在 **VPC** 下，输入无服务器集群的虚拟私有云（VPC）的 ID。它是基于 Amazon VPC 服务的 VPC，您创建集群后保存了其 ID。

1. 对于**子网**，请选择您创建集群后保存了其 ID 的子网。

1. 在**防火墙（安全组）**中，选择与集群关联的安全组。如果该安全组有允许流量从安全组流向自身的入站规则，则此值有效。通过这样的规则，同一个安全组的成员可以相互通信。有关更多信息，请参阅《Amazon VPC 开发者指南》中的[安全组规则](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules)。

1. 展开**高级详细信息**部分，然后选择您在 [为 MSK Serverless 集群上的主题创建 IAM 角色](create-iam-role.md) 中创建的 IAM 角色。

1. 选择**启动**。

1. 在左侧导航窗格中，选择 **Instances (实例)**。然后选中代表您新创建的 Amazon EC2 实例的行中的复选框。从此时开始，我们称这个实例为*客户端计算机*。

1. 选择**连择**并按照说明连接到客户端计算机。

**要在客户端计算机上设置 Apache Kafka 客户端工具**

1. 要安装 Java，请在客户端计算机上运行以下命令：

   ```
   sudo yum -y install java-11
   ```

1. 要获取创建主题和发送数据所需的 Apache Kafka 工具，请运行以下命令：

   ```
   wget https://archive.apache.org/dist/kafka/2.8.1/kafka_2.12-2.8.1.tgz
   ```

   ```
   tar -xzf kafka_2.12-2.8.1.tgz
   ```
**注意**  
提取 Kafka 档案后，请确保 `bin` 目录中的脚本具有适当的执行权限。为此，请运行以下命令。  

   ```
   chmod +x kafka_2.12-2.8.1/bin/*.sh
   ```

1. 转到 `kafka_2.12-2.8.1/libs` 目录，然后运行以下命令以下载 Amazon MSK IAM JAR 文件。Amazon MSK IAM JAR 让客户端计算机可以访问集群。

   ```
   wget https://github.com/aws/aws-msk-iam-auth/releases/download/v2.3.0/aws-msk-iam-auth-2.3.0-all.jar
   ```

   使用此命令，您还可以[下载其他版本或更新版本的](https://github.com/aws/aws-msk-iam-auth/releases) Amazon MSK IAM JAR 文件。

1. 转到 `kafka_2.12-2.8.1/bin` 目录。复制以下属性设置并将其粘贴到新文件中。为文件 `client.properties` 命名并保存文件。

   ```
   security.protocol=SASL_SSL
   sasl.mechanism=AWS_MSK_IAM
   sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
   sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler
   ```

**下一步**

[创建 Apache Kafka 主题](msk-serverless-create-topic.md)

# 创建 Apache Kafka 主题
<a name="msk-serverless-create-topic"></a>

在此步骤中，您将使用先前创建的客户端计算机在无服务器集群上创建主题。

**Topics**
+ [设置环境以创建主题](#msk-serverless-create-topic-prerequisites)
+ [创建主题并向主题写入数据](#msk-serverless-create-topic-procedure)

## 设置环境以创建主题
<a name="msk-serverless-create-topic-prerequisites"></a>
+ 在创建主题之前，请确保您已将 AWS MSK IAM JAR 文件下载到 Kafka 安装的`libs/`目录中。如果还没有这样做，请在 Kafka 的 `libs/` 目录中运行以下命令。

  ```
  wget https://github.com/aws/aws-msk-iam-auth/releases/download/v2.3.0/aws-msk-iam-auth-2.3.0-all.jar
  ```

  该 JAR 文件是 MSK Serverless 集群的 IAM 身份验证所必需的。
+ 运行 Kafka 命令时，你可能需要确保`classpath`包含 AWS MSK IAM JAR 文件。为此，请执行以下操作之一：
  + 将环境变量 `CLASSPATH` 设置为您的 Kafka 库，如下例所示。

    ```
    export CLASSPATH=<path-to-your-kafka-installation>/libs/*:<path-to-your-kafka-installation>/libs/aws-msk-iam-auth-2.3.0-all.jar
    ```
  + 使用带有显式 `classpath` 的完整 Java 命令运行 Kafka 命令，如下例所示。

    ```
    java -cp "<path-to-your-kafka-installation>/libs/*:<path-to-your-kafka-installation>/libs/aws-msk-iam-auth-2.3.0-all.jar" org.apache.kafka.tools.TopicCommand --bootstrap-server $BS --command-config client.properties --create --topic msk-serverless-tutorial --partitions 6
    ```

## 创建主题并向主题写入数据
<a name="msk-serverless-create-topic-procedure"></a>

1. 在以下`export`命令中，*my-endpoint*替换为在创建集群后保存的 bootstrap-server 字符串。然后，转到客户端计算机上的 `kafka_2.12-2.8.1/bin` 目录并运行 `export` 命令。

   ```
   export BS=my-endpoint
   ```

1. 运行以下命令以创建名为 `msk-serverless-tutorial` 的主题。

   ```
   <path-to-your-kafka-installation>/bin/kafka-topics.sh --bootstrap-server $BS --command-config client.properties --create --topic msk-serverless-tutorial --partitions 6
   ```

**下一步**

[在 MSK Serverless 中生成和使用数据](msk-serverless-produce-consume.md)

# 在 MSK Serverless 中生成和使用数据
<a name="msk-serverless-produce-consume"></a>

在此步骤中，您将使用在先前步骤中创建的主题生成和使用数据。

**生成和使用消息**

1. 运行以下命令以创建控制台生成器。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list $BS --producer.config client.properties --topic msk-serverless-tutorial
   ```

1. 输入所需的任何消息，然后按 **Enter**。重复执行此步骤两次或三次。每次输入一行并按 **Enter** 时，该行会作为单独的消息发送到集群。

1. 将与客户端计算机的连接保持打开状态，然后在新窗口中打开与该计算机的第二个单独连接。

1. 使用客户端计算机的第二个连接，通过以下命令创建控制台使用器。*my-endpoint*替换为在创建集群后保存的引导服务器字符串。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server my-endpoint --consumer.config client.properties --topic msk-serverless-tutorial --from-beginning
   ```

   您开始看到之前使用控制台生成器命令时输入的消息。

1. 在生成器窗口中输入更多消息，并观察消息显示在使用器窗口中。

如果在运行这些命令遇到 `classpath` 问题，请确保从正确的目录运行命令。此外，请确保 AWS MSK IAM JAR 位于`libs`目录中。或者，也可以使用带有显式 `classpath` 的完整 Java 命令运行 Kafka 命令，如下例所示。

```
java -cp "kafka_2.12-2.8.1/libs/*:kafka_2.12-2.8.1/libs/aws-msk-iam-auth-2.3.0-all.jar" org.apache.kafka.tools.ConsoleProducer —broker-list $BS —producer.config client.properties —topic msk-serverless-tutorial
```

**下一步**

[删除您为 MSK Serverless 创建的资源](delete-resources.md)

# 删除您为 MSK Serverless 创建的资源
<a name="delete-resources"></a>

在此步骤中，您将删除在本教程中创建的资源。

**要删除集群**

1. 在[https://console.aws.amazon.com/msk/家](https://console.aws.amazon.com/msk/home)中打开亚马逊 MSK 控制台。

1. 在集群列表中，选择为此教程创建的集群。

1. 对于**操作**，选择**删除集群**。

1. 在字段中输入 `delete`，然后选择**删除**。

**要停止客户端计算机**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在 Amazon EC2 实例列表中，选择您为本教程创建的客户端计算机。

1. 选择**实例状态**，然后选择**终止实例**。

1. 选择**终止**。

**删除 IAM policy 和角色**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**。

1. 在搜索框中，输入您为本教程创建的 IAM 角色的名称。

1. 选择角色 。然后选择**删除角色**并确认删除。

1. 在导航窗格中，选择**策略**。

1. 在搜索框中，输入您为本教程创建的策略的名称。

1. 选择策略，打开其摘要页面。在策略的**摘要**页面上，选择**删除策略**。

1. 选择**删除**。