其中比較難理解的是min.insync.replicas,這個參數表示ISR集合中的最少副本數,默認值是1,並只有在acks=all或-1時才有效。
acks與min.insync.replicas搭配使用,才能為消息提供最高的持久性保證。
我們知道leader副本默認就包含在ISR中,如果ISR中只有1個副本,acks=all也就相當於acks=1了,引入min.insync.replicas的目的就是為了保證下限:不能只滿足於ISR全部寫入,還要保證ISR中的寫入個數不少於min.insync.replicas。
常見的場景是創建一個三副本(即replication.factor=3)的topic,最少同步副本數設為2(即min.insync.replicas=2),acks設為all,以保證最高的消息持久性。