你好,Kafka/zookeeper用户,
我的团队有一个kafka集群,它与apachezookeeper一起工作。Kafka在ec2上举行。出于各种原因,ec2主机可能会宕机并被新主机替换。新主机的代理id与前一个不同(由aws生成,而不是由我们生成)。此时,zookeeper仍处于旧状态,以前的主机是某些分区的副本。虽然领导人重新选举成功,但新的替换主机没有以任何方式用作领导人或副本。
Kafka的文档中提到过一段时间后“代理再次出现”,但在ec2世界中,主机被永久替换。
在分布式系统术语中,我们只尝试处理“失败/恢复”故障模型,其中节点突然停止工作,然后进行恢复(可能不知道它们已经死亡)。
我明白原因。zookeeper包含每个分区的状态。该状态包含旧的死亡主机作为领导者和/或追随者。当出现新主机时,此状态不会更新为包含新主机,直到我们手动运行命令来设置副本。
Kafka有没有办法自动利用新的经纪人作为领导者或isr?
这对我们的团队造成了很大的操作负担,需要手动将新代理指定为副本,并触发“首选领导人选举”。
1条答案
按热度按时间hm2xizp91#
首选领导人选举可以通过打开配置自动触发
auto.leader.rebalance.enable
和调谐leader.imbalance.per.broker.percentage
.但是,您面临的问题是:
新服务器不会自动分配任何现有的数据分区,因此除非将分区移动到新服务器,否则在创建新主题之前,它们不会执行任何工作。
看来你得想出一个能自动执行的方案
kafka-reassign-partitions.sh
每当发生替换时编写脚本。没有提供开箱即用的纯自动方案。