从 Amazon MSK 集群中移除代理 - Amazon Managed Streaming for Apache Kafka
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

从 Amazon MSK 集群中移除代理

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

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

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

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

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

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

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

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

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

你可以使用 Kafka 管理员 APIs 或 Cruise Control 将分区移动到你打算在集群中保留的其他代理。请参阅 Reassign partitions

移除分区的示例过程

本节是如何从要移除的代理中移除分区的示例。假设您有一个集群包含 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-2msk-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. 当状态指示每个分区的分区重新分配已完成时,请监控 UserPartitionExists 指标 5 分钟,以确保它对于您从中移动分区的代理显示 0。确认后,您可以继续从集群中移除代理。

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

使用 Amazon 管理控制台删除代理
  1. https://console.aws.amazon.com/msk/ 打开 Amazon MSK 控制台。

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

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

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

  5. 选择 Save changes(保存更改)

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

使用 Amazon CLI 删除代理

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

重要

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

使用 Amazon API 移除经纪商

要使用 API 移除集群中的代理,请参阅UpdateBrokerCount适用于 Apache Kafka 的亚马逊托管流媒体 Kafka API 参考》。