

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

# 从 Amazon MSK 集群中移除代理
<a name="msk-remove-broker"></a>

当您想要从 Amazon Managed Streaming for Apache Kafka（MSK）预置集群中移除代理时，请使用此 Amazon MSK 操作。您可以通过移除代理集来减少集群的存储和计算容量，而不会影响可用性、数据持久性风险或中断数据流应用程序。

您可以向集群添加更多代理来应对流量增加，并在流量减少时移除代理。借助代理添加和移除功能，您可以充分利用集群容量并优化 MSK 基础设施成本。移除代理使您可以对现有集群容量进行代理级别的控制，以满足您的工作负载需求并避免迁移到另一个集群。

使用 AWS 控制台、命令行界面 (CLI)、SDK 或 CloudFormation 来减少已配置集群的代理数量。MSK 选择没有任何分区的代理（金丝雀主题除外），并阻止应用程序向这些代理生成数据，同时安全地从集群中移除这些代理。

如果您想减少集群的存储和计算，则应该每个可用区移除一个代理。例如，您可以通过一次代理移除操作从两个可用区集群中移除两个代理，或者从三个可用区集群中移除三个代理。

有关在从集群中移除代理后如何重新平衡分区的信息，请参阅[重新分配分区](bestpractices.md#bestpractices-balance-cluster)。

无论实例大小如何，您都可以从所有基于 M5 和 M7g 的 MSK 预置集群中移除代理。

Kafka 版本 2.8.1 及更高版本支持删除代理，包括 KRaft 模式集群。

**Topics**
+ [移除代理分区](#msk-remove-broker-partitions)
+ [使用控制台移除代理](#msk-remove-broker-console)
+ [使用 CLI 移除代理](#msk-remove-broker-cli)
+ [使用 API 移除代理](#msk-remove-broker-api)

## 准备通过移除所有分区来移除代理
<a name="msk-remove-broker-partitions"></a>

在开始代理移除过程之前，请先从您计划移除的代理中移动所有分区（主题 `__amazon_msk_canary` 和 `__amazon_msk_canary_state` 的分区除外）。这些是 Amazon MSK 创建用于集群运行状况和诊断指标的内部主题。

你可以使用 Kafka 管理员 APIs 或 Cruise Control 将分区移动到你打算在集群中保留的其他代理。请参阅 [Reassign partitions](https://docs.aws.amazon.com/msk/latest/developerguide/bestpractices.html#bestpractices-balance-cluster)。

### 移除分区的示例过程
<a name="msk-remove-broker-partitions-example"></a>

本节是如何从要移除的代理中移除分区的示例。假设您有一个集群包含 6 个代理，每个可用区 2 个代理，并且它有四个主题：
+ `__amazon_msk_canary`
+ `__consumer_offsets`
+ `__amazon_msk_connect_offsets_my-mskc-connector_12345678-09e7-c657f7e4ff32-2`
+ `msk-brk-rmv`

1. 按照[创建客户端计算机](https://docs.aws.amazon.com/msk/latest/developerguide/create-client-machine.html)所述创建客户端计算机。

1. 配置客户端计算机后，运行以下命令来列出集群中的所有可用主题。

   ```
   ./bin/kafka-topics.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --list
   ```

   在此示例中，我们看到四个主题名称：`__amazon_msk_canary`、`__consumer_offsets`、`__amazon_msk_connect_offsets_my-mskc-connector_12345678-09e7-c657f7e4ff32-2` 和 `msk-brk-rmv`。

1. 在客户端计算机上创建一个名为 `topics.json` 的 json 文件，并添加所有用户主题名称，如以下代码示例所示。您不需要包含 `__amazon_msk_canary` 主题名称，因为这是一个服务管理主题，在必要时会自动移动。

   ```
   {
   "topics": [
   {"topic": "msk-brk-rmv"},
   {"topic": "__consumer_offsets"},
   {"topic": "__amazon_msk_connect_offsets_my-mskc-connector_12345678-09e7-c657f7e4ff32-2"}
   ],
   "version":1
   }
   ```

1. 运行以下命令来生成一个提案，将分区仅移动到集群上 6 个代理中的 3 个代理。

   ```
   ./bin/kafka-reassign-partitions.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --topics-to-move-json-file topics.json --broker-list 1,2,3 --generate
   ```

1. 创建一个名为 `reassignment-file.json` 的文件，并复制您从上面的命令获得的 `proposed partition reassignment configuration`。

1. 运行以下命令来移动您在 `reassignment-file.json` 中指定的分区。

   ```
   ./bin/kafka-reassign-partitions.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --reassignment-json-file reassignment-file.json --execute
   ```

   输出看上去类似于以下内容：

   ```
   Successfully started partition reassignments for morpheus-test-topic-1-0,test-topic-1-0
   ```

1. 运行以下命令来验证所有分区是否已移动。

   ```
   ./bin/kafka-reassign-partitions.sh --bootstrap-server “CLUSTER_BOOTSTRAP_STRING” --reassignment-json-file reassignment-file.json --verify
   ```

   该输出值看上去类似于以下内容。监控状态，直到请求的主题中的所有分区都已成功重新分配：

   ```
   Status of partition reassignment:
   Reassignment of partition msk-brk-rmv-0 is completed.
   Reassignment of partition msk-brk-rmv-1 is completed.
   Reassignment of partition __consumer_offsets-0 is completed.
   Reassignment of partition __consumer_offsets-1 is completed.
   ```

1. 当状态指示每个分区的分区重新分配已完成时，请监控 `UserPartitionExists` 指标 5 分钟，以确保它对于您从中移动分区的代理显示 `0`。确认后，您可以继续从集群中移除代理。

## 使用 AWS 管理控制台移除代理
<a name="msk-remove-broker-console"></a>

**使用 AWS 管理控制台删除代理**

1. 在 [https://console.aws.amazon.com/msk/](https://console.aws.amazon.com/msk/) 打开 Amazon MSK 控制台。

1. 选择包含要移除的代理的 MSK 集群。

1. 在集群详细信息页面上，选择**操作**按钮，然后选择**编辑代理数量**选项。

1. 输入您希望集群在每个可用区具有的代理数量。控制台汇总了各可用区中将被移除的代理数量。确保这就是您想要的。

1. 选择**保存更改**。

为防止代理意外移除，控制台要求您确认移除代理。

## 使用 AWS CLI 删除代理
<a name="msk-remove-broker-cli"></a>

运行以下命令，并将 `ClusterArn` 替换为创建集群时所获取的 Amazon 资源名称（ARN）。如果您没有该集群的 ARN，可以通过列出所有集群来找到它。有关更多信息，请参阅 [Listing Amazon MSK clusters](https://docs.aws.amazon.com/msk/latest/developerguide/msk-list-clusters.html)。将 `Current-Cluster-Version` 替换为集群的当前版本。

**重要**  
集群版本不是简单的整数。要查找集群的当前版本，请使用[DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster)操作或 desc [ribe-](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) AWS CLI cluster 命令。示例版本是 `KTVPDKIKX0DER`。

该*Target-Number-of-Brokers*参数表示此操作成功完成后您希望集群拥有的代理节点总数。您指定的值*Target-Number-of-Brokers*必须是小于集群中当前代理数量的整数。它还必须是可用区数目的倍数。

```
aws kafka update-broker-count --cluster-arn ClusterArn --current-version Current-Cluster-Version --target-number-of-broker-nodes Target-Number-of-Brokers
```

该 `update-broker-count` 操作的输出如以下 JSON 所示：

```
{
"ClusterOperationInfo": {
"ClientRequestId": "c0b7af47-8591-45b5-9c0c-909a1a2c99ea",
        "ClusterArn": "arn:aws:kafka:us-east-1:012345678012:cluster/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2",
        "CreationTime": "2019-09-25T23:48:04.794Z",
        "OperationArn": "arn:aws:kafka:us-east-1:012345678012:cluster-operation/exampleClusterName/abcdefab-1234-abcd-5678-cdef0123ab01-2/0123abcd-abcd-4f7f-1234-9876543210ef",
        "OperationState": "UPDATE_COMPLETE",
        "OperationType": "DECREASE_BROKER_COUNT",
        "SourceClusterInfo": {
"NumberOfBrokerNodes": 12
        },
        "TargetClusterInfo": {
"NumberOfBrokerNodes": 9
        }
    }
}
```

在此输出中， `OperationType` 是 `DECREASE_BROKER_COUNT`。如果 `OperationState` 的值为 `UPDATE_IN_PROGRESS`，请等待一段时间，然后再次运行 `describe-cluster-operation` 命令。

## 使用 AWS API 移除经纪商
<a name="msk-remove-broker-api"></a>

要使用 API 删除集群中的代理，请参阅[UpdateBrokerCount](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-nodes-count.html#clusters-clusterarn-nodes-count-url)《*适用于 Apache Kafka 的亚马逊托管流媒体 Kafka API 参考*》。