用途:把 Kafka 主题分区从当前副本数扩容到目标副本数(支持 1→2、1→3、2→N),并生成可直接传给 kafka-reassign-partitions.sh --execute 的分区重分配 JSON,同时控制磁盘使用率不超过阈值(默认 70%)。
主要能力:提供 Web UI 与命令行两种用法;三阶段流水线(分配新副本→合并主表→输出 JSON),每个阶段由 validate.py 检查门控,只有 PASS 才进入下一阶段,校验模块不可用视为 FAIL。JSON 拆分策略包括 size_10g(单分区超阈值单独成文件)、topic_count(每 N 个主题合并)、single_file、per_topic、custom(如 {"big_size": 10, "small_batch": 10})。分配失败时以 NO_OTHER_BROKER 或 L3_BLOCKED 阻止并给出量化缺口,不会强行生成不可提交的计划。对上传的主题名做白名单与路径包含检查,防止路径穿越。
使用方式:Web UI 运行 python scripts/app.py(默认 5000 端口),上传 topic.xlsx 与 broker.xlsx、下载模板、调整参数并一键运行;命令行依次执行: python scripts/stage1_allocate.py --topic topic.xlsx --broker broker.xlsx --output-dir out --replica-count 2 --disk-threshold 70 python scripts/stage2_merge.py --main out/topic.xlsx --new out/topic_new.xlsx --output-dir out --replica-count 2 python scripts/stage3_json.py --input out/topic_all.xlsx --output-dir out --replica-count 2 --strategy size_10g --strategy-param 10 输出目录须与输入目录不同,否则报 OUTPUT_OVERWRITES_INPUT。stdout 输出单个 JSON 结果,stderr 输出四行阶段报告;退出码 0 为 PASS、1 为校验失败、2 为阻塞。工作目录默认在系统临时目录 kafka-replica-reassignment-work/,可用 KAFKA_REASSIGN_WORK_DIR 覆盖。
适用场景:Kafka 集群扩容副本、跨 broker 均衡分区、按磁盘容量规划重分配。限制:需提供符合模板的 Excel 输入;同分区副本不能出现重复 broker ID;不可绕过阶段校验;完整的依赖、安装与部署细节暂未提供。