代理关闭时 kafka 消息重新平衡

n4f*_*eng 1 apache-kafka partition

一个普遍的问题。假设一个主题在不同的服务器(代理)上有 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|

现在如果代理 3 完成了,3-0 到 3-9 将如何插入到代理 1 和代理 2 中?

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

提前致谢。

Mic*_*son 5

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

为了在 broker 宕机时保持数据可用,您必须创建复制因子大于 1 的主题。

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

我建议您阅读文档中的复制部分以了解其工作原理。