Rujukan · Durability
acks, ISR & min.insync.replicas
Bila produce dikira "berjaya", dan bila "berjaya" tu boleh hilang. Disemak pada Kafka 4.1 dan librdkafka master.
acks
| acks | Ack bila | Hilang bila |
|---|---|---|
| 0 | tak tunggu langsung | bila-bila masa; offset tak diketahui |
| 1 | leader tulis log | leader mati sebelum follower copy |
| all / -1 | semua ahli ISR sekarang ada record | ISR mengecut ke leader sahaja, dan min.insync=1 |
Default
| Setting | Java 4.x | librdkafka | Diset di |
|---|---|---|---|
acks | all | -1 (all) | producer |
enable.idempotence | true | false | producer |
min.insync.replicas | 1 | broker / topic | |
replica.lag.time.max.ms | 30000 | broker | |
flush.messages (fsync) | Long.MAX_VALUE (tiada fsync paksa) | broker / topic | |
ProducerConfig · ServerLogConfigs · ReplicationConfigs · librdkafka
Peraturan
- "all" = semua dalam ISR sekarang, bukan semua replika.
- Follower keluar ISR kalau tak sampai hujung log leader dalam
replica.lag.time.max.ms. acks=all+ ISR <min.insync.replicas→NotEnoughReplicas(retriable) → retry sampaidelivery.timeout.ms→ error ke callback (jalan B).min.insync.replicastidak diperiksa untukacks=0/1.- RF=1 → ISR = {leader} →
acks=all≡acks=1. - Kafka bergantung pada replication untuk durability, bukan fsync. Pada RF=1, record yang dah di-ack mungkin masih dalam page cache.
Formula pantas
Broker boleh hilang tanpa produce terhenti (acks=all) = RF − min.insync.replicas.
Lab: 3 − 2 = 1 · Edge: 1 − 1 = 0 (dan tiada salinan kedua).