代理失败,未重新创建副本

mklgxw1f  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(300)

听起来,如果代理失败,复制副本将不会分配给其他代理。我用3个代理创建了一个简单的测试集。我用partition=13,replicas=3创建了一个主题。
我关闭了一个代理(broker1),我看到“isr”和“leader”得到了更新以反映这个事实(不过,副本列表仍然显示了刚刚关闭的代理的代理id)。
我启动了另一个id为4的全新经纪人。在这一点上,我假设,Kafka可以在这个代理上创建上述主题的副本,这似乎不是这样,有什么原因吗?
那么,为什么Kafka的设计是不在其他可用的机器上创建副本,如果其中一个代理关闭,持有副本。它只不过是换了个旗子而已
ps:我从文档中了解到-副本不会自动修复。但是,分布式系统中隐含的假设背后的原因是在可用的机器上创建副本,以避免某些副本不可用的事实。
仔细查看文档
kafka集群将自动检测任何代理关闭或故障,并为该计算机上的分区选举新的领导者。
确认,如果代理关闭,kafka将不会在创建其他副本方面做任何事情。
没有在任何可用的机器上创建复制副本的原因是什么?
它根本不会被创造出来吗?如果是,副本计数可能与原始计数不同?

li9yvcax

li9yvcax1#

这是正确的,Kafka的设计不是“自动愈合”。
将副本移动到新的代理上可能是一项昂贵的操作。分区可以包含数TB的数据,因此代理之间的复制会给集群增加巨大的负载。用户将无法使用此已用带宽。
如果您使用了足够的副本,那么当代理关闭时不会对用户造成影响。此外,Kafka预计,券商将在失败后回归。因此,与其从零开始引导一个新的代理,不如在原始代理返回时同步它,这是一个更便宜的操作。
有一些工具(如巡航控制)可以在某些情况下自动“治愈”Kafka。另外,如果您希望某些代理长时间停机,可以将分区移动到其他代理以避免丢失副本。文件中的退役经纪人部分涵盖了这一点。

相关问题