Kafka:高可用性所需的最小代理人数是多少?

问题描述 投票:3回答:2

假设我想在小规模部署的生产环境中使用高可用的Kafka。我必须使用以下配置

min.insync.replicas=2 // Don't want to lose messages in case of 1 broker crash    
default.replication.factor=3 // Will let producer write in case of 1 replica disappear with broker crash

如果出现1个代理崩溃并导致1个副本崩溃的情况,卡夫卡将开始制作新副本吗?

在任何情况下,我们必须至少拥有default.replication.factor个经纪人的数量才能继续工作吗?

apache-kafka high-availability
2个回答
3
投票

为了在Kafka中实现高可用性,您需要考虑以下因素:

1。复制因子:默认情况下,复制因子设置为1。在生产环境中推荐的replication-factor3,这表示需要3个代理

2。首选领导者选择:取消代理后,其中一个副本将成为分区的新领导者。一旦发生故障的代理重新启动并运行,它将没有领导者分区,Kafka将恢复其在宕机时丢失的信息,并再次成为分区领导者。默认情况下,首选领导者选举已启用。为了最小化切换回首选领导者时丢失消息的风险,您需要将生产者属性acks设置为all

3。不洁的领导人选举:您可以启用不干净的领导者选择,以使不同步的副本成为领导者并保持分区的高可用性。领导者选举不干净时,未同步到新领导者的消息将丢失。在一致性和高可用性之间进行权衡,这意味着禁用不干净的领导者选择后,如果包含分区的领导者副本的代理不可用,并且不存在任何同步副本来替换它,则直到领导者之前该分区都将不可用副本或另一个同步副本已恢复联机。

4。致谢:确认是指在使用acks属性确认消息之前提交新消息的副本数。当acks设置为0时,将立即确认该消息,而无需等待其他代理提交。设置为1时,一旦领导者确认信息,信息即被确认。将acks设置为all可提供最高的一致性保证,但写入群集的速度较慢。

5。最小同步副本min.insync.replicas定义生产者成功将消息发送到分区所必须具有的最小同步副本数。如果min.insync.replicas设置为2和[ C0]设置为acks,每个消息必须成功写入至少两个副本。这意味着除非两个代理都失败(不太可能),否则消息不会丢失。如果其中一个代理发生故障,则该分区将不再可用于写入。同样,这是一致性和可用性之间的权衡。


0
投票

嗯,您可以具有与all相同的复制系数。但是可能会有一些挑战。

我们知道,在代理中断期间,该代理上存在的所有分区副本都不可用。受影响分区的时间可用性取决于其其他副本的存在和状态。

如果分区没有其他副本,则该分区将完全不可用。但是,如果分区中有其他同步副本,则这些同步副本之一将成为临时分区的负责人。如果该分区具有其他副本,但没有其他副本处于同步状态,则我们可以选择:要么选择等待分区负责人恢复在线状态(从而提高可用性),要么允许不同步的副本成为临时副本。分区负责人–牺牲一致性。

因此,在这种情况下,任何分区都将具有一个额外的同步副本,以应对丢失分区领导者的情况。这意味着应将min.insync.replicas至少设置为2。

为了使最小ISR大小为2,复制因子也必须至少为2。但是,如果只有2个副本且一个代理不可用,则ISR大小将减小到最小值以下的1。因此,最好使复制因子大于最小ISR大小(至少3)。

© www.soinside.com 2019 - 2024. All rights reserved.