一个一般性的问题。假设一个主题在不同的服务器(代理)上有3个kafka分区,每个分区有10条以偏移量为时间戳的消息(0,1,...,9,更多的数量意味着在分区中停留的时间更短,同时也意味着是新来的消息)。假设在服务器完成后,一个分区碰巧关闭了。卡夫卡将关闭分区中的10条消息重新平衡到其他分区的策略是什么?
从视觉上看,我们
broker 1分区:\x{e76f}\x{e76f}.
broker 2分区:\x{e76f}\x{e76f}2\x{e76f}\x{e76f}.
broker 3分区:\x{e76f}\x{e76f}3
现在,如果代理3完成了,如何将3-0到3-9插入到broker 1和broker 2中?
(我的假设是,在默认情况下,它将被随机分散一半,并根据broker 3的时间戳插入,附加在broker 1和2的尾上,也许有什么地方可以通过代码配置行为?)
提前谢谢。
发布于 2019-05-09 04:39:25
下图将帮助您理解Kafka如何复制分区。如果一个代理故障,消费者可以从另一个代理读取,因为Kafka具有复制能力。(当然,您需要像下面这样设置它),例如,如果broker 1死了,broker 2将成为主题1-第1部分的领导者,消费者可以从中读取。

动物园管理员将知道如果一个经纪人(分区)倒闭,它将任命另一个领导者。
发布于 2019-05-08 20:11:49
如果分区仅存在于单个代理(复制因子1)上,则当此代理脱机时,分区不可用。这就是你在问题中画的。
为了保持数据可用,即使在代理下降时,您也必须创建复制因子大于1的主题。
然后,分区的数据将被复制到多个代理上,如果其中一个代理脱机,用户流量将被重定向到可用的副本。
我建议您通过文档中的复制部分来了解这是如何工作的。
https://stackoverflow.com/questions/56046770
复制相似问题