本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
从 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
按照创建客户端计算机所述创建客户端计算机。
配置客户端计算机后,运行以下命令来列出集群中的所有可用主题。
./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
。在客户端计算机上创建一个名为
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 }
运行以下命令来生成一个提案,将分区仅移动到集群上 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
创建一个名为
reassignment-file.json
的文件,并复制您从上面的命令获得的proposed partition reassignment configuration
。运行以下命令来移动您在
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
运行以下命令来验证所有分区是否已移动。
./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.
当状态指示每个分区的分区重新分配已完成时,请监控
UserPartitionExists
指标 5 分钟,以确保它对于您从中移动分区的代理显示0
。确认后,您可以继续从集群中移除代理。
使用 Amazon 管理控制台移除代理
使用 Amazon 管理控制台删除代理
在 https://console.aws.amazon.com/msk/
打开 Amazon MSK 控制台。 选择包含要移除的代理的 MSK 集群。
在集群详细信息页面上,选择操作按钮,然后选择编辑代理数量选项。
输入您希望集群在每个可用区具有的代理数量。控制台汇总了各可用区中将被移除的代理数量。确保这就是您想要的。
选择 Save changes(保存更改)。
为防止代理意外移除,控制台要求您确认移除代理。
使用 Amazon CLI 删除代理
运行以下命令,并将 ClusterArn
替换为创建集群时所获取的 Amazon 资源名称(ARN)。如果您没有该集群的 ARN,可以通过列出所有集群来找到它。有关更多信息,请参阅 Listing Amazon MSK clusters。将 Current-Cluster-Version
替换为集群的当前版本。
重要
集群版本不是简单的整数。要查找集群的当前版本,请使用DescribeCluster操作或 desc ribe-KTVPDKIKX0DER
。
该Target-Number-of-Brokers
参数表示此操作成功完成后您希望集群拥有的代理节点总数。您指定的值Target-Number-of-Brokers
必须是小于集群中当前代理数量的整数。它还必须是可用区数目的倍数。
aws kafka update-broker-count --cluster-arn
ClusterArn
--current-versionCurrent-Cluster-Version
--target-number-of-broker-nodesTarget-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
命令。
使用 Amazon API 移除经纪商
要使用 API 移除集群中的代理,请参阅UpdateBrokerCount《适用于 Apache Kafka 的亚马逊托管流媒体 Kafka API 参考》。