【问题标题】:kafka message re-balance when broker shutdown代理关闭时 kafka 消息重新平衡
【发布时间】:2019-09-26 13:02:15
【问题描述】:

一个普遍的问题。假设一个主题在不同的服务器(代理)上有 3 个 kafka 分区,每个分区有 10 条消息,其时间戳为偏移量(0,1,...,9,更大的数字意味着在分区中停留的时间更短,也意味着是新来的消息)。假设一个分区碰巧在服务器完成后关闭。 Kafka 将关闭分区中的 10 条消息重新平衡到其他分区的策略是什么?

视觉上,我们有

代理 1 分区:|1-0|1-1|1-2|1-3|1-4|1-5|1-6|1-7|1-8|1-9|

经纪人2分区:|2-0|2-1|2-2|2-3|2-4|2-5|2-6|2-7|2-8|2-9|

经纪人3分区:|3-0|3-1|3-2|3-3|3-4|3-5|3-6|3-7|3-8|3-9|

现在如果broker 3完成了,3-0到3-9怎么插入broker 1和broker 2呢?

(我的假设是默认情况下它将随机分布一半并根据代理 3 的时间戳插入,附加到代理 1 和 2 的尾部,也许有什么地方可以通过代码配置行为?)

提前致谢。

【问题讨论】:

  • Kafka 不会将消息重新平衡到不同的分区上,而是将分区重新平衡到代理上。
  • 感谢提醒。我会让我的问题更清楚。

标签: apache-kafka partition


【解决方案1】:

如果分区仅存在于单个代理上(复制因子 1),那么当该代理离线时,该分区不可用。这就是你在问题中画的。

要在代理出现故障时保持数据可用,您必须创建复制因子大于 1 的主题。

然后分区的数据会被复制到多个broker上,如果其中一个下线,用户流量将被重定向到可用的副本。

我建议您通过文档中的Replication section 了解其工作原理。

【讨论】:

    【解决方案2】:

    下图将帮助您了解 Kafka 如何复制分区。如果一个代理关闭,消费者可以从另一个代理读取,因为 Kafka 具有复制能力。 (当然,你需要像下面这样设置) 例如,如果代理 1 死了,代理 2 将成为 topic1-part1 的领导者,消费者可以从中读取。

    Zookeeper 会知道一个代理(分区)是否宕机,它会指定另一个领导者。

    【讨论】:

      猜你喜欢
      • 2018-02-21
      • 2020-02-13
      • 2014-04-29
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 2018-05-23
      • 2021-11-29
      相关资源
      最近更新 更多