本页介绍了如何在 Managed Service for Apache Kafka 集群中更改分配给主题分区的代理。
概览
在 Managed Service for Apache Kafka 中创建新主题时,您可以选择分区数和复制因子。
复制因子是指存储主题中每个分区副本的代理数量。其中一个代理会充当领导者,其他代理则充当跟随者。主副本处理分区的写入请求,而跟随者复制数据。如果主节点发生故障,则会选择一个从节点作为主节点。
如果集群上启用了自动重新平衡,则扩容集群可能会导致重新分配分区,以保持每个代理的分区数量大致相同。
您可能出于以下原因需要更改分区分配:
您扩缩了已停用自动重新平衡功能的集群,但新添加的代理未处理任何负载。
某个分区接收的流量远高于其他分区,您希望通过将其他分区移至不同的代理来隔离负载。
您可以使用 Kafka 命令行工具重新分配分区,如下一部分中所述。
更改分区分配
如需更改分配给分区的代理,请执行以下步骤。
在 Compute Engine 虚拟机上安装 Kafka 命令行工具。虚拟机必须能够访问连接到集群的子网。如需了解详情,请参阅使用 Kafka 命令行工具生成和使用消息。
通过调用
kafka-configs.sh --describe命令获取集群中的代理列表。kafka-configs.sh --describe --entity-type brokers \ --bootstrap-server=BOOTSTRAP_ADDRESS \ --command-config client.properties将 BOOTSTRAP_ADDRESS 替换为集群的引导地址。该命令会返回代理 ID 和动态代理设置的列表。
输出示例:
Dynamic configs for broker 10 are: Dynamic configs for broker 11 are: Dynamic configs for broker 12 are: Default configs for brokers in the cluster are:在此示例中,代理 ID 为
10、11和12。没有动态代理设置。创建一个 JSON 文件,其中列出了要重新分配给不同代理的主题。 将文件格式设置为如下示例所示:
{ "topics": [ { "topic": "topic-1" }, { "topic": "topic-2" } ] }使用
--generate标志调用kafka-reassign-partitions.sh命令,以获取当前分区映射,并生成候选分区重新分配。kafka-reassign-partitions.sh --generate \ --bootstrap-server=BOOTSTRAP_ADDRESS \ --topics-to-move-json-file TOPICS_FILE \ --broker-list BROKER_LIST \ --command-config client.properties替换以下内容:
- TOPICS_FILE:上一步中 JSON 文件的路径。
- BROKER_LIST:主题的分区应重新分配到的代理的英文逗号分隔列表。示例:
11,10。
输出示例:
Current partition replica assignment {"version":1,"partitions":[{"topic":"topic-1","partition":0,"replicas":[12,10],"log_dirs":["any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"topic-1","partition":0,"replicas":[11,10],"log_dirs":["any","any"]}]}在此示例中,
topic-1的分区 0 分配给代理12和10。创建一个 JSON 文件,用于定义 broker 到分区的映射。您可以从上一步中建议的重新分配开始,根据需要进行修改。
例如,以下映射会将
topic-1的分区 0 移至代理11和10。{ "version":1, "partitions":[ { "topic":"topic-1", "partition":0, "replicas":[11,10] } ] }通过调用
kafka-reassign-partitions.sh --execute命令分配分区。kafka-reassign-partitions.sh --execute \ --reassignment-json-file PARTITION_MAP \ --bootstrap-server=BOOTSTRAP_ADDRESS \ --command-config client.properties将 PARTITION_MAP 替换为上一步中 JSON 文件的路径。
后续步骤
- Managed Service for Apache Kafka 中的代理概览
- 监控 Managed Service for Apache Kafka 集群
- 规划 Managed Service for Apache Kafka 集群的规模