---
title: "min.insync.replicas with acks=all: when Kafka refuses writes"
description: "Brokers fail one by one under min.insync.replicas=2. Writes still commit at ISR 2, then Kafka rejects the next acks=all write with NOT_ENOUGH_REPLICAS at ISR 1."
url: https://monedula.dev/kafka-simulator/scenarios/min-isr-boundary/
---

# min.insync.replicas with acks=all: when Kafka refuses writes

Scenario 03.1.2 · min.ISR boundary. Replication · Beginner · about 1 min · Apache Kafka 4.3.

acks=all commits at ISR == min.insync.replicas, then fails one replica below.

Run it: https://monedula.dev/kafka-simulator/playground/?scenario=03.1.2

## What you start with

With acks=all, a write only commits when at least min.insync.replicas copies are in-sync. Starting from a 3-replica partition with min.ISR=2, brokers are failed one at a time so the ISR crosses that boundary while a producer keeps writing.

## Step by step

1. **Cluster ready - RF=3, min.ISR=2** (t+0.000s) [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=03.1.2&t=0)
2. **O1 committed with full ISR (3)** (t+3.050s) [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=03.1.2&t=1)
3. **broker-3 down - ISR shrinks to 2** (t+6.050s): ISR is now exactly min.insync.replicas. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=03.1.2&t=2)
4. **O2 still commits at the boundary (ISR == 2)** (t+8.200s) [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=03.1.2&t=3)
5. **broker-2 down - ISR shrinks to 1** (t+11.050s): ISR is now below min.insync.replicas. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=03.1.2&t=4)
6. **O3 blocked - NotEnoughReplicas** (t+13.200s): acks=all needs 2 in-sync replicas; only 1 remains. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=03.1.2&t=5)

## The takeaway

Once the ISR falls below min.insync.replicas the leader rejects acks=all writes with NOT_ENOUGH_REPLICAS - min.ISR trades availability for the guarantee that every acked record sits on at least that many replicas.

## Configs in this scenario

- [`acks`](https://kafka.apache.org/43/configuration/producer-configs/#producerconfigs_acks): How many replicas must have a write before the producer counts it as sent: 0 (none), 1 (the leader only) or all (every in-sync replica, the default, and required for idempotence). [How acks works](https://monedula.dev/kafka-simulator/configs/acks/)
- [`min.insync.replicas`](https://kafka.apache.org/43/configuration/topic-configs/#topicconfigs_min.insync.replicas): The fewest in-sync replicas, leader included, that must have a write for an acks=all produce to succeed (default 1); with fewer in the ISR the leader rejects the write with NOT_ENOUGH_REPLICAS. [How min.insync.replicas works](https://monedula.dev/kafka-simulator/configs/min-insync-replicas/)

## Further reading

- [Apache Kafka documentation](https://kafka.apache.org/43/configuration/topic-configs/#topicconfigs_min.insync.replicas)

## Troubleshooting

- [NotEnoughReplicasException in Kafka: causes and fixes](https://monedula.dev/kafka-simulator/troubleshooting/not-enough-replicas/)
