22.3. 在添加代理后,使用分区重新分配工具来重新分配分区
在增加 Kafka 集群中的代理数量后,使用 kafka-reassign-partitions.sh
工具生成的重新分配文件来重新分配分区。重新分配文件应该描述了如何将分区重新分配给放大 Kafka 集群中的代理。您可以将文件中指定的重新分配应用到代理,然后验证新分区分配。
此流程描述了使用 TLS 的安全扩展过程。您需要一个使用 TLS 加密和 mTLS 身份验证的 Kafka 集群。
kafka-reassign-partitions.sh
工具可用于重新分配 Kafka 集群中的分区,无论您是否通过集群管理所有节点,还是使用节点池来管理集群中的节点组。
虽然您可以使用 kafka-reassign-partitions.sh
工具进行此操作,但建议使用 Cruise Control 来自动化分区重新分配和集群重新平衡。Cruise Control 可以在不停机的情况下将主题从一个代理移到另一个代理,这是重新分配分区的最高效方法。
先决条件
-
您有一个正在运行的 Kafka 集群,它基于配置了内部 TLS 加密和 mTLS 身份验证的
Kafka
资源。 -
您已生成了一个重新分配 JSON 文件,名为
reassignment.json
。 - 您正在运行连接到正在运行的 Kafka 代理的交互式 pod 容器。
-
您作为配置了 ACL 规则的
KafkaUser
连接,该规则指定管理 Kafka 集群及其主题的权限。
流程
-
通过增加
Kafka.spec.kafka.replicas
配置选项,添加您需要的许多新代理。 - 验证新代理 pod 是否已启动。
-
如果没有这样做,请运行交互式 pod 容器来生成一个重新分配 JSON 文件,名为
reassignment.json
。 将
reassignment.json
文件复制到交互式 pod 容器中。oc cp reassignment.json <interactive_pod_name>:/tmp/reassignment.json
oc cp reassignment.json <interactive_pod_name>:/tmp/reassignment.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <interactive_pod_name > 替换为 pod 的名称。
在交互式 pod 容器中启动 shell 进程。
oc exec -n <namespace> -ti <interactive_pod_name> /bin/bash
oc exec -n <namespace> -ti <interactive_pod_name> /bin/bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <namespace > 替换为运行 pod 的 OpenShift 命名空间。
使用交互式 pod 容器中的
kafka-reassign-partitions.sh
脚本运行分区重新分配。bin/kafka-reassign-partitions.sh --bootstrap-server <cluster_name>-kafka-bootstrap:9093 \ --command-config /tmp/config.properties \ --reassignment-json-file /tmp/reassignment.json \ --execute
bin/kafka-reassign-partitions.sh --bootstrap-server <cluster_name>-kafka-bootstrap:9093 \ --command-config /tmp/config.properties \ --reassignment-json-file /tmp/reassignment.json \ --execute
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <cluster_name > 替换为 Kafka 集群的名称。例如,
my-cluster-kafka-bootstrap:9093
如果要节流复制,您还可以传递
--throttle
选项,并传递 --throttle 选项,以字节为单位。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令将输出两个重新分配 JSON 对象。第一个记录正在移动的分区的当前分配。如果您需要稍后恢复重新分配,您应该将其保存到本地文件(而非 pod 中的文件)。第二个 JSON 对象是在重新分配 JSON 文件中传递的目标重新分配。
如果您需要在重新分配过程中更改节流,您可以使用带有不同节流率相同的命令。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用来自任何代理 pod 的
kafka-reassign-partitions.sh
命令行工具验证重新分配是否已完成。这与上一步中的命令相同,但使用--verify
选项而不是--execute
选项。bin/kafka-reassign-partitions.sh --bootstrap-server <cluster_name>-kafka-bootstrap:9093 \ --command-config /tmp/config.properties \ --reassignment-json-file /tmp/reassignment.json \ --verify
bin/kafka-reassign-partitions.sh --bootstrap-server <cluster_name>-kafka-bootstrap:9093 \ --command-config /tmp/config.properties \ --reassignment-json-file /tmp/reassignment.json \ --verify
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当
--verify
命令报告正在移动的每个分区都成功完成时,重新分配已完成。最后--verify
也具有删除任何重新分配节流的影响。- 现在,如果您保存了 JSON 以将分配恢复到其原始代理,您可以删除恢复的文件。