你好 Kafka/Zookeeper 用户,
我的团队有一个 kafka 集群,它与 Apache zookeeper 一起工作。 kafka 托管在 EC2 上。出于多种原因,EC2 主机可以关闭并由新主机替换。与前一个主机相比,新主机具有不同的代理 ID(由 AWS 生成的 ID,而不是我们)。此时,zookeeper 仍然具有旧状态,其中先前的主机是某些分区的副本。尽管领导者 re-election 成功发生,但新的替代主机并未以任何方式用作领导者或复制品。
kafka 文档在一段时间之后谈论'经纪人再次出现',但在 EC2 世界主机被永久更换。
在分布式系统术语中,我们只尝试处理“fail/recover”故障模型,其中节点突然停止工作,然后恢复(可能不知道它们已经死亡)。
我理解这个的原因。 Zookeeper 包含每个分区的状态。该状态包含作为领导者 and/or 追随者的旧死宿主。当新主机出现时,在我们手动运行命令来设置副本之前,此状态不会更新以包含新主机。
kafka 有没有办法自动利用新经纪人作为领导者或 ISR?
这给我们的团队带来了很多操作负担,需要手动将新经纪人分配为副本并触发“首选领导者选举”。
1 回答
可以通过打开 config
auto.leader.rebalance.enable
并调整leader.imbalance.per.broker.percentage
来自动触发首选领导者选举。但是,您面临的问题是:
似乎你必须找出一个能够在发生替换时自动执行
kafka-reassign-partitions.sh
脚本的方案。没有 purely-automatic 计划提供开箱即用。