一个普遍的问题。假设一个主题在不同的服务器(经纪人)上有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的尾部,也许在某个地方可以通过代码配置行为?)
谢谢。
答案 0 :(得分:4)
如果一个分区仅存在于单个代理上(复制因子1),则当该代理脱机时,该分区不可用。这就是您提出的问题。
要即使经纪人破产也要保持数据可用,您必须创建复制因子大于1的主题。
然后,分区的数据将被复制到多个代理,并且如果其中一个代理脱机,则将用户流量重新分配到可用副本。
我建议您仔细阅读文档中的Replication section,以了解其工作原理。
答案 1 :(得分:1)