Propriétés ACID classiques
Atomicity : transaction traitée comme unité indivisible (tout ou rien).
Consistency : transaction fait passer la base d’un état valide à un autre.
Isolation : transactions concurrentes ne s’affectent pas mutuellement.
Durability : une fois validée, la transaction est permanente même en cas de crash.
Coût en systèmes distribués
Maintenir ACID à grande échelle est coûteux :
Latence accrue : synchronisation nécessaire entre nœuds (protocole 2PC).
Limitation de scalabilité : overhead de coordination.
Coût réseau : multiples rounds de messages.
Tolérance aux pannes faible : vote à l’unanimité requis.
Problème slowest-of-N : le plus lent ralentit tout le système.
Approche configurable
Différents use cases ont différentes exigences :
Tracking de clics sur site web : privilégier vitesse sur fiabilité.
Paiements par carte : exiger fiabilité maximale.
Kafka propose des niveaux de garantie configurables.
Exactly-once semantics dans KSQL
KSQL offre exactly-once semantics via le protocole transactionnel de Kafka.
Chaque message est traité exactement une fois.
Configuration au niveau du processing :
SET 'processing.guarantee' = 'exactly_once';Compromis : exactly-once plus lent que at-least-once.