代理失败后 Kafka 0.10.0.1 分区重新分配

Kafka 0.10.0.1 partition reassignment after broker failure

我正在测试 kafka 的分区重新分配,作为启动生产系统的前奏。我有几个主题,每个主题有 9 个分区,复制因子为 3。我已经杀死了其中一个代理来模拟故障情况,并验证了一些主题复制不足(通过雅虎卡夫卡管理器的分支进行验证,修改为允许添加一个版本 0.10.0.1 集群)。

然后我用不同的 ID 启动了一个新的经纪人。我现在想将分区分配给这个新代理。我尝试使用 kafka 管理器的重新分配分区功能,但它不起作用(可能是由于不正确修改的 fork)。

我看到 kafka 附带了一个 bin/kafka-reassign-partitions.sh 脚本,但文档说我必须以 json 格式手动写出每个主题的分区重新分配。有没有一种方法可以在不手动决定必须去哪些代理分区的情况下处理这个问题?

嗯,我今天做的事情完全一样,真是巧合。我没有你可能会喜欢的答案,但我最终实现了我想要的。

最终,我所做的是执行 kafka-reassign-partitions 命令,使用相同的工具建议重新分配。但无论它生成什么,我只是用旧的失败代理 ID 替换了新的代理 ID。出于某种原因,生成的 json 移动了所有内容。

这将失败(或者更确切地说永远不会完成),因为旧经纪人已经过世。然后我不得不删除zookeeper中的重新分配操作(znode:admin/reassign_partitions或其他东西)。

然后我在新代理上重新启动了 kafka,它神奇地成为了正在寻找新的替代领导者的分区的领导者。

明天我会告诉你是否一切正常,我是否还有工作 ;-)