听起来,如果代理发生故障,副本将不会分配给其他代理。我与 3 个经纪人创建了简单的测试设置。我创建了一个分区 = 13、副本 = 3 的主题。
我关闭了一个经纪人(经纪人1),我看到“ISR”和“Leader”已更新以反射(reflect)这一事实(尽管副本列表仍然显示刚刚关闭的经纪人的经纪人ID)。
我用 id 4 启动了另一个全新的代理。此时,我假设 kafka 可以在上述主题的该代理上创建副本,但似乎并非如此,有什么原因吗?
那么,为什么 Kafka 设计不在其他可用机器上创建副本(如果保存副本的代理之一已关闭)。它只是切换领导者标志
PS:我从文档中了解到 - 副本不会自行自动修复。但是,分布式系统中隐式假设的背后原因是在可用计算机上创建副本,以避免某些副本不可用的事实。
仔细查看文档
Kafka 集群将自动检测任何代理关闭或故障,并为该机器上的分区选举新的领导者。
确认,如果代理宕机,kafka 将不会执行任何关于创建额外副本的操作。
在任何情况下都未创建副本背后的原因是什么 可用机器?
它根本不会被创建吗?如果是,副本计数可能与原始计数不同?
最佳答案
没错,按照设计,Kafka 不会“自动修复”。
将副本移动到新代理上可能是一项昂贵的操作。一个分区可以包含数 TB 的数据,因此代理之间的复制可能会给集群增加巨大的负载。用户将无法使用所使用的带宽。
如果您使用足够的副本,则代理关闭时不会对用户产生影响。此外,卡夫卡期望经纪人在失败后返回。因此,与其从零开始引导新的代理,不如在原始代理返回时使其同步是一种更便宜的操作。
有些工具(如 Cruise Control )可以在某些情况下自动“自动修复”Kafka。此外,如果您预计某些代理会长时间关闭,您可以将分区移动到其他代理以避免丢失副本。 decomissioning brokers section在文档中涵盖了它。
关于apache-kafka - Kafka - 代理失败,副本未重新创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64534639/