我正在测试Kafka的分区重新分配作为启动生产系统的前兆。我有几个主题,每个有9个分区,复制因子为3。我已经杀死了一个代理来模拟一个失败的情况,并验证了一些主题是否被复制(通过修改后的yahoo的kafka管理器的fork来验证是否允许添加一个版本为0.10.0.1的集群)。
然后我用一个不同的id启动了一个新的代理,现在我想把分区分配给这个新的代理。我试图使用kafka管理器的重新分配分区功能,但是没有起作用(可能是由于不正确地修改了fork)。
我看到Kafka带着 bin/kafka-reassign-partitions.sh
脚本,但是文档说我必须手动以json格式写出每个主题的分区重新分配。有没有一种方法可以处理这个问题,而不必手动决定哪些代理分区必须运行?
1条答案
按热度按时间eanckbw91#
嗯,今天我也在做同样的事情,真是太巧了。我没有你可能会喜欢的答案,但我最终实现了我想要的。
最终,我所做的是执行kafka reassign partitions命令,使用同一工具建议的重新分配命令。但是不管它生成什么,我只是用旧的失败的代理id替换了新的代理id。
这将失败(或者说永远不会完成),因为旧的代理已经传递了。然后,我不得不删除zookeeper中的重新分配操作(znode:admin/reassign\u partitions或者别的什么)。
然后我在新的代理上重新启动了kafka,它神奇地成为了分区的负责人,分区正在寻找新的替代负责人。
如果明天一切正常,如果我还有工作,我会告诉你的