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.