15.2. 添加代理后重新分配分区


在增加 Kafka 集群中的代理数量后,使用 kafka-reassign-partitions.sh 工具生成的重新分配文件来重新分配分区。重新分配文件应该描述了如何将分区重新分配给放大 Kafka 集群中的代理。您可以将文件中指定的重新分配应用到代理,然后验证新分区分配。

此流程描述了使用 TLS 的安全扩展过程。您需要一个使用 TLS 加密和 mTLS 身份验证的 Kafka 集群。

注意

虽然您可以使用 kafka-reassign-partitions.sh 工具,但建议使用 Cruise Control 进行自动分区重新分配和集群重新平衡。Cruise Control 可以在不停机的情况下将主题从一个代理移到另一个代理,这是重新分配分区的最高效方法。

先决条件

  • 现有的 Kafka 集群。
  • 安装了 额外 AMQ 代理的新机器。
  • 您已创建了 JSON 文件,以指定如何将分区重新分配给放大集群中的代理。

    在此过程中,我们为名为 my-topic 的主题重新分配所有分区。名为 topics.json 的 JSON 文件指定主题,用于生成 reassignment.json 文件。

示例 JSON 文件指定 my-topic

{
  "version": 1,
  "topics": [
    { "topic": "my-topic"}
  ]
}

流程

  1. 使用与集群中其他代理相同的设置为新代理创建一个配置文件,但 broker.id 除外,它应该是没有被任何其他代理使用的数字。
  2. 启动新的 Kafka 代理,将您在上一步中创建的配置文件作为 kafka-server-start.sh 脚本的参数:

    su - kafka
    /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties
  3. 验证 Kafka 代理是否正在运行。

    jcmd | grep Kafka
  4. 为每个新代理重复上述步骤。
  5. 如果没有这样做,请使用 kafka-reassign-partitions.sh 工具生成名为 reassignment.json 的重新分配 JSON 文件。

    生成重新分配 JSON 文件的命令示例

    /opt/kafka/bin/kafka-reassign-partitions.sh \
      --bootstrap-server localhost:9092 \
      --topics-to-move-json-file topics.json \ 1
      --broker-list 0,1,2,3,4 \ 2
      --generate

    1
    指定主题的 JSON 文件。
    2
    用于包含在操作中的 kafka 集群中的代理 ID。这假设代理 4 已被添加。

    显示当前和提议的副本分配的 JSON 文件示例

    Current partition replica assignment
    {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,0],"log_dirs":["any","any","any"]}]}
    
    Proposed partition reassignment configuration
    {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2,3],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3,4],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,4,0],"log_dirs":["any","any","any","any"]}]}

    如果您需要稍后恢复更改,请将此文件的副本保存到本地。

  6. 使用 --execute 选项运行分区重新分配。

    /opt/kafka/bin/kafka-reassign-partitions.sh \
      --bootstrap-server localhost:9092 \
      --reassignment-json-file reassignment.json \
      --execute

    如果要节流复制,您还可以通过 --throttle 选项,并传递一个 inter-broker 节流率(以字节/秒为单位)。例如:

    /opt/kafka/bin/kafka-reassign-partitions.sh \
      --bootstrap-server localhost:9092 \
      --reassignment-json-file reassignment.json \
      --throttle 5000000 \
      --execute
  7. 使用 --verify 选项验证重新分配是否已完成。

    /opt/kafka/bin/kafka-reassign-partitions.sh \
      --bootstrap-server localhost:9092 \
      --reassignment-json-file reassignment.json \
      --verify

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.