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"} ] }
流程
-
使用与集群中其他代理相同的设置为新代理创建一个配置文件,但
broker.id
除外,它应该是没有被任何其他代理使用的数字。 启动新的 Kafka 代理,将您在上一步中创建的配置文件作为
kafka-server-start.sh
脚本的参数:su - kafka /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties
验证 Kafka 代理是否正在运行。
jcmd | grep Kafka
- 为每个新代理重复上述步骤。
如果没有这样做,请使用
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
显示当前和提议的副本分配的 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"]}]}
如果您需要稍后恢复更改,请将此文件的副本保存到本地。
使用
--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
使用
--verify
选项验证重新分配是否已完成。/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verify
当
--verify
命令报告正在移动的每个分区都成功完成时,重新分配已完成。最后--verify
也具有删除任何重新分配节流的影响。