【问题标题】:Kafka replicas not in sync once a host is replaced更换主机后,Kafka 副本不同步
【发布时间】: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


【解决方案1】:

可以通过开启配置auto.leader.rebalance.enable和调优leader.imbalance.per.broker.percentage自动触发首选领导选举。

但是,您面临的问题是:

不会自动为新服务器分配任何现有数据 分区,因此除非将分区移至它们,否则它们将不会执行 在创建新主题之前的任何工作。

看来你必须想出一个方案,在发生替换时能够自动执行kafka-reassign-partitions.sh 脚本。没有开箱即用的纯自动方案。

【讨论】:

  • 感谢您的信息!我们打开了auto.leader.rebalance.enable。但这仍然需要我们将新的代理 ID 指定为“副本列表”中的第一个条目,无论我们需要它作为分区的领导者。我想我们必须想办法运行上面的脚本。可能是在 Auto Scaling 组中添加生命周期钩子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
相关资源
最近更新 更多