Minimum min.insync.replicas for Durability
min.insync.replicas must be >= 2 and <= replicationFactor − 1.
Rationale
Producers with `acks=all` are only safe when `min.insync.replicas >= 2`. At the default of 1, a single ISR can ack a write and a broker crash erases data the producer thought was durable. Setting it equal to RF kills availability: any broker loss makes the topic write-unavailable. Sweet spot is `2 <= min.insync.replicas <= RF - 1`.
Pattern
2 <= min.insync.replicas <= replicationFactor - 1
Examples
RF=3 + min.insync.replicas=2
RF=5 + min.insync.replicas=3
RF=3 + min.insync.replicas=1 (silent data loss)
RF=3 + min.insync.replicas=3 (any broker loss = write-unavailable)
Parameters
| Name | Default | Description |
|---|---|---|
min |
2 |
Floor for min.insync.replicas. |
Governs
This policy relates to the following Kafka configuration keys:
Implementation
Drop this YAML into Conduktor Console as a ResourcePolicy, then link it from an ApplicationInstance, Application, or KafkaCluster.
# Conduktor self-service ResourcePolicy # spec.configs values are strings — wrap with int(string(...)) for numeric compare. --- apiVersion: self-serve/v1 kind: ResourcePolicy metadata: name: min-insync-replicas-bound spec: targetKind: Topic description: min.insync.replicas must be >= 2 and <= replicationFactor - 1 rules: - condition: '"min.insync.replicas" in spec.configs && int(string(spec.configs["min.insync.replicas"])) >= 2 && int(string(spec.configs["min.insync.replicas"])) <= int(spec.replicationFactor) - 1' errorMessage: "min.insync.replicas must be >= 2 and <= replicationFactor - 1 (durability vs availability tradeoff)"
Related policies
Try Conduktor Console
Enforce policies like this across your team — central audit history, pre-commit guardrails, ApplicationInstance bindings. 5-min Docker install.
Get Started →