假设我想让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
Kafka是否会开始制作新的复制品,以防一个代理崩溃,一个复制品随之消失?
在任何情况下,我们是否必须至少拥有default.replication.factor数量的代理才能继续工作?
2条答案
按热度按时间brgchamk1#
好吧,你可以有相同的复制因子
min.insync.replicas
. 但也有一些挑战。我们知道,在代理中断期间,该代理上存在的所有分区副本都不可用。受影响分区的时间可用性由其其他副本的存在和状态决定。
如果一个分区没有额外的副本,则该分区将完全不可用。但是,如果一个分区有其他同步副本,其中一个同步副本将成为临时分区的领导者。如果分区有额外的副本,但没有同步副本,我们可以做出选择:要么选择等待分区负责人重新联机—牺牲可用性 — 或者允许不同步的复制副本成为临时分区的领导者—牺牲一致性。
因此,在这种情况下,任何分区都需要有一个额外的同步副本,以便在丢失分区前导后继续生存。这意味着min.insync.replicas应至少设置为2。
为了使最小isr大小为2,复制因子也必须至少为2。但是,如果只有2个副本且一个代理不可用,则isr大小将减少到最小值以下1。因此,复制因子最好大于最小isr大小(至少3)。
jfewjypa2#
为了在kafka中实现高可用性,您需要考虑以下因素:
1复制因子:默认情况下,复制因子设置为
1
. 推荐的replication-factor
对于生产环境3
也就是说需要3个经纪人。2首选领导人选举:当代理被取下时,其中一个副本将成为分区的新领导人。一旦失败的代理再次启动并运行,它就没有前导分区,kafka恢复它在关闭时丢失的信息,它再次成为分区前导。默认情况下启用首选领导人选举。为了最大限度地降低切换回首选领导时丢失消息的风险,您需要设置producer属性
acks
至all
(显然这是以性能为代价的)。三。不干净的领导者选举:您可以启用不干净的领导者选举,以允许不同步副本成为领导者并保持分区的高可用性。对于不干净的领导人选举,没有同步到新领导人的消息将丢失。一致性和高可用性之间存在一种权衡,这意味着在禁用不干净的前导选举的情况下,如果包含某个分区的前导副本的代理变得不可用,并且不存在可替换它的同步副本,则在前导副本或另一个同步副本重新联机之前,该分区将变得不可用。
4确认:确认是指在使用确认消息之前提交新消息的副本数
acks
财产。当acks设置为0
消息将立即得到确认,而无需等待其他代理提交。当设置为1
,则消息在领导者提交消息后得到确认。配置acks
至all
提供最高的一致性保证,但对群集的写入速度较慢。5最小同步副本数:
min.insync.replicas
定义必须为生产者提供的同步复制副本的最小数量,以便将消息成功发送到分区。如果min.insync.replicas
设置为2
以及acks
设置为all
,每个消息必须成功写入至少两个副本。这意味着消息不会丢失,除非两个代理都失败(不太可能)。如果其中一个代理失败,分区将不再可用于写入。同样,这是一致性和可用性之间的权衡。