使用复制不足的分区修复 kafka 集群

fixing kafka cluster with under-replicated partitions

我们的一个 kafka 集群出现问题。我们有 6 个 v1.0 节点,所有主题的复制因子都是 3 和 10 partitions/topic,这对我们来说似乎足够了。

由于电源故障,其中 3 个节点宕机了一段时间,现在我们有很多主题被报告为分区复制不足。

我们在论坛上看到的唯一解决方案(似乎更被接受)是滚动重启,直到一切都神奇地修复,但我希望有更好的解决方案。有人从这种情况中恢复过来了吗?网络或 cpu 不应该成为同步的问题,因为它甚至没有接近极限。

非常感谢!

让 Kafka 自动处理它可能是您最好的选择,通常使用主题重新分配工具。 https://www.google.no/search?q=kafka+partition+reassignment+tool

您还可以通过使用所有主题并将所有消息写入新主题来强制重新分发,新主题具有相同的设置,但名称与当前主题略有不同。

最后我们可以恢复集群,手动删除许多损坏的分区,因此我们将复制不足的分区从大约 4600 减少到大约 1k。

在那之后,并且所有这些都只存在于其中的 2 个节点中,我们决定在两个节点中进行有序关闭,然后再次开始复制。

我想是有某种错误导致 kafka 停止从节点复制,但这成功了。

更新:

集群稳定后,您还可以尝试重新平衡可用代理之间损坏的分区。根据我的经验,最好生成小的重新平衡文件而不是重新平衡整个集群,因为它通常会卡在过程中间(至少在旧版本中)