Hello Kafka / Zookeeper用户,
我的团队有一个kafka集群,它与Apache zookeeper一起工作。 kafka托管在EC2上。出于多种原因,EC2主机可以关闭并由新主机替换。与前一个主机相比,新主机具有不同的代理ID (由AWS生成的ID,而不是我们)。 此时,zookeeper仍然具有旧状态,其中先前的主机是某些分区的副本。 尽管领导人重新选举成功,但新的替代主持人并没有以任何方式被用作领导者或复制品。
kafka文件谈到了经纪人再次出现'一段时间后,但在EC2世界主机被永久更换。
在分布式系统术语中,我们只尝试处理"失败/恢复"节点突然停止工作然后恢复的故障模型(可能不知道它们已经死亡)。
我理解其原因。 Zookeeper包含每个分区的状态。该州包含作为领导者和/或追随者的旧死宿主。当新主机出现时,在我们手动运行命令来设置副本之前,此状态不会更新以包含新主机。
kafka有没有办法自动将新经纪人用作领导者或ISR?
这给我们的团队带来了很多操作负担,需要手动将新经纪人分配为副本并触发首选领导者选举。
答案 0 :(得分:1)
可以通过启用配置auto.leader.rebalance.enable
并调整leader.imbalance.per.broker.percentage
来自动触发首选领导者选举。
但是,您遇到的问题是:
不会自动为新服务器分配任何现有数据 分区,所以除非分区被移动到它们,否则他们不会做 任何工作,直到创建新主题。
似乎你必须找出一个能够在发生替换时自动执行kafka-reassign-partitions.sh
脚本的方案。没有提供纯粹的自动方案。