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 集群及其主题的权限。

流程

  1. 通过增加 Kafka.spec.kafka.replicas 配置选项,添加您需要的许多新代理。
  2. 验证新代理 pod 是否已启动。
  3. 如果没有这样做,请运行交互式 pod 容器来生成一个重新分配 JSON 文件,名为 reassignment.json
  4. reassignment.json 文件复制到交互式 pod 容器中。

    oc cp reassignment.json <interactive_pod_name>:/tmp/reassignment.json
    Copy to Clipboard Toggle word wrap

    <interactive_pod_name > 替换为 pod 的名称。

  5. 在交互式 pod 容器中启动 shell 进程。

    oc exec -n <namespace> -ti <interactive_pod_name> /bin/bash
    Copy to Clipboard Toggle word wrap

    <namespace > 替换为运行 pod 的 OpenShift 命名空间。

  6. 使用交互式 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
    Copy to Clipboard Toggle word wrap

    <cluster_name > 替换为 Kafka 集群的名称。例如,my-cluster-kafka-bootstrap:9093

    如果要节流复制,您还可以传递 --throttle 选项,并传递 --throttle 选项,以字节为单位。例如:

    bin/kafka-reassign-partitions.sh --bootstrap-server
      <cluster_name>-kafka-bootstrap:9093 \
      --command-config /tmp/config.properties \
      --reassignment-json-file /tmp/reassignment.json \
      --throttle 5000000 \
      --execute
    Copy to Clipboard Toggle word wrap

    此命令将输出两个重新分配 JSON 对象。第一个记录正在移动的分区的当前分配。如果您需要稍后恢复重新分配,您应该将其保存到本地文件(而非 pod 中的文件)。第二个 JSON 对象是在重新分配 JSON 文件中传递的目标重新分配。

    如果您需要在重新分配过程中更改节流,您可以使用带有不同节流率相同的命令。例如:

    bin/kafka-reassign-partitions.sh --bootstrap-server
      <cluster_name>-kafka-bootstrap:9093 \
      --command-config /tmp/config.properties \
      --reassignment-json-file /tmp/reassignment.json \
      --throttle 10000000 \
      --execute
    Copy to Clipboard Toggle word wrap
  7. 使用来自任何代理 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
    Copy to Clipboard Toggle word wrap

    --verify 命令报告正在移动的每个分区都成功完成时,重新分配已完成。最后 --verify 也具有删除任何重新分配节流的影响。

  8. 现在,如果您保存了 JSON 以将分配恢复到其原始代理,您可以删除恢复的文件。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat