【发布时间】:2017-06-08 11:36:25
【问题描述】:
您好 Kafka/Zookeeper 用户,
我的团队有一个与 Apache zookeeper 配合使用的 kafka 集群。 kafka 托管在 EC2 上。由于多种原因,EC2 主机可能会关闭并被新主机替换。与之前的主机相比,新主机具有不同的代理 ID(ID 由 AWS 生成,而不是我们生成)。 此时,zookeeper 仍然具有先前主机是某些分区副本的旧状态。 尽管领导者重新选举成功,但新的替代主机并未以任何方式用作领导者或副本。
一段时间后,kafka 文档谈到“代理再次出现”,但在 EC2 世界中,主机被永久替换。
在分布式系统术语中,我们仅尝试处理“故障/恢复”故障模型,其中节点突然停止工作,然后恢复(可能不知道它们已经死亡)。
我明白其中的原因。 Zookeeper 包含每个分区的状态。该状态包含作为领导者和/或追随者的旧主机。当新主机出现时,此状态不会更新以包含新主机,直到我们手动运行命令来设置副本。
kafka 有没有办法自动利用新的代理作为领导者或 ISR?
这给我们的团队带来了很多操作负担,需要手动将新代理分配为副本并触发“首选领导者选举”。
【问题讨论】:
-
您解决了这种情况吗?我仍然不能为 ISR 或领导者使用新的代理,因为它被赋予了代理 ID。我们可以通过设置最小 isr 数量来解决这个问题吗?
标签: amazon-ec2 apache-kafka apache-zookeeper