6.3.5. 缩减 Kafka 集群


其它资源

这个步骤描述了如何减少 Kafka 集群中的代理数量。

先决条件

  • 现有的 Kafka 集群。
  • 一个 重新分配 JSON 文件,说明如何在代理被删除后将分区重新分配给集群中的代理。

流程

  1. 使用 kafka-reassign-partitions.sh 命令行工具执行分区重新分配。

    kafka-reassign-partitions.sh --zookeeper <ZooKeeperHostAndPort> --reassignment-json-file <ReassignmentJsonFile> --execute

    如果您要节流复制,您还可以使用每秒字节数(以字节为单位)传递 --throttle 选项。例如:

    kafka-reassign-partitions.sh --zookeeper zookeeper1:2181 --reassignment-json-file reassignment.json --throttle 5000000 --execute

    此命令将显示两个重新分配 JSON 对象:第一个记录了正在移动的分区的当前分配。您应该将其保存到文件中,以便稍后需要恢复重新分配。第二个 JSON 对象是您在重新分配 JSON 文件中传递的目标重新分配。

  2. 如果您需要在重新分配期间更改节流,您可以使用具有不同节流率的同一命令行。例如:

    kafka-reassign-partitions.sh --zookeeper zookeeper1:2181 --reassignment-json-file reassignment.json --throttle 10000000 --execute
  3. 使用 kafka-reassign-partitions.sh 命令行工具定期验证重新分配是否已完成。这与上一步中的命令相同,但使用 --verify 选项而不是 --execute 选项。

    kafka-reassign-partitions.sh --zookeeper <ZooKeeperHostAndPort> --reassignment-json-file <ReassignmentJsonFile> --verify

    例如:

    kafka-reassign-partitions.sh --zookeeper zookeeper1:2181 --reassignment-json-file reassignment.json --verify
  4. --verify 命令报告每个分区成功完成时,重新分配已完成。最后的 --verify 也会产生删除任何重新分配节的效果。现在,如果您保存了 JSON,将分配还原到其原始代理中,您可以删除还原文件。
  5. 所有分区重新分配完成后,删除的代理不应对集群中的任何分区负责。您可以通过检查代理 log.dirs 配置参数给出的每个目录来验证这一点。如果代理中的任何日志目录都包含与扩展正则表达式 [a-zA-Z0-9.-]+\.[a-z0-9]+-delete$ 不匹配的目录,则代理仍然有实时分区,且不应停止它。

    您可以执行以下命令检查:

    ls -l <LogDir> | grep -E '^d' | grep -vE '[a-zA-Z0-9.-]+\.[a-z0-9]+-delete$'

    如果上述命令显示任何输出,则代理仍然有实时分区。在这种情况下,重新分配没有完成,或者重新分配 JSON 文件不正确。

  6. 确认代理没有实时分区后,您可以停止它。

    su - kafka
    /opt/kafka/bin/kafka-server-stop.sh
  7. 确认 Kafka 代理已被停止。

    jcmd | grep kafka
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.