我的3节点群集具有配置min.insync.replicas=2
和default.replication.factor=3
。
如果我只在一个经纪人在场的情况下尝试生产,那我就失败了。
但是,如果我仅在有1个代理可用时尝试使用,则使用方仍然可以使用消息。看来min.insync.replicas=2
不适用于消费者。是知道行为还是我错过了什么?
答案 0 :(得分:1)
min.insync.replicas
指定了必须确认一次写入才能将其视为成功的最小副本数,因此,它对负责写入的生产方具有影响。此配置参数对消费者方没有任何直接影响,这就是为什么它不影响消费者的原因,即使有效经纪人的数量小于min.insync.replicas
的值。
当生产者将
acks
设置为"all"
(或"-1"
)时,min.insync.replicas
指定必须确认写入的最小副本数 认为写入成功。如果不能达到这个最小值 遇到,那么制片人会提出一个例外(NotEnoughReplicas
或NotEnoughReplicasAfterAppend
)。使用时min.insync.replicas
和acks
一起使您可以执行更大的任务 耐用性保证。一个典型的场景是创建一个主题 复制因子为3时,将min.insync.replicas
设置为2,然后 产生acks
中的"all"
。这将确保生产者提高 如果大多数副本未收到写入,则为例外。