从 Amazon MSK 集群中移除代理 - Amazon Managed Streaming for Apache Kafka

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

从 Amazon MSK 集群中移除代理

当你想从亚马逊托管流媒体for Apache Kafka (MSK) 预配置的集群中删除代理时,请使用此亚马逊 MSK 操作。您可以通过移除代理集来减少集群的存储和计算容量,而不会影响可用性、数据持久性风险或中断数据流应用程序。

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

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

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

有关从集群中移除代理后如何重新平衡分区的信息,请参阅重新分配分区

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

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

准备通过移除所有分区来移除代理

在开始代理删除过程之前,请先移动所有分区,但主题分__amazon_msk_canary区和计划__amazon_msk_canary_state删除的代理分区除外。这些是 Amazon MSK 为集群运行状况和诊断指标创建的内部主题。

你可以使用 Kafka 管理员 API 或 Cruise Control 将分区移动到你打算在集群中保留的其他代理。请参见重新分配分区

删除分区的示例过程

本节是如何从要删除的代理中移除分区的示例。假设您的集群包含 6 个代理,每个可用区有 2 个代理,并且它有四个主题:

  • __amazon_msk_canary

  • __consumer_offsets

  • __amazon_msk_connect_offsets_my-mskc-connector_12345678-09e7-c657f7e4ff32-2

  • msk-brk-rmv

  1. 按照创建客户端计算机中所述创建客户机

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

    ./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

  3. 在客户端计算机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 }
  4. 运行以下命令生成提案,将分区仅移至集群上 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
  5. 创建一个名为的文件reassignment-file.json,然后复制proposed partition reassignment configuration你从上面的命令中获得的文件。

  6. 运行以下命令来移动您在中指定的分区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
  7. 运行以下命令以验证所有分区都已移动。

    ./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.
  8. 当状态表明每个分区的分区重新分配已完成时,请监视 5 分钟,以确保显示0从中移动分区的代理的UserPartitionExists指标。确认这一点后,您可以继续从集群中移除代理。

使用 AWS 管理控制台移除代理

使用 AWS 管理控制台删除代理
  1. 通过以下网址打开 Amazon MSK 控制台:https://console.aws.amazon.com/msk/

  2. 选择包含要删除的代理的 MSK 集群。

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

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

  5. 选择保存更改

为防止意外删除代理,控制台会要求您确认是否要删除代理。

使用 AWS CLI 删除代理

运行以下命令,ClusterArn替换为您在创建集群时获得的 Amazon 资源名称 (ARN)。如果您没有该集群的 ARN,可以通过列出所有集群来找到它。有关更多信息,请参阅列出 Amazon MSK 集群Current-Cluster-Version替换为集群的当前版本。

重要

集群版本不是简单的整数。要查找集群的当前版本,请使用DescribeCluster操作或 desc ribe- 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 } } }

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

使用 AWS API 移除经纪商

要使用 API 移除集群中的代理,请参阅《适用于 Apache Kafka 的亚马逊托管流媒体 Kafka AP I 参考》中的 “UpdateBroker计数”。