Sequential vs Random Access
Accès séquentiel vs accès aléatoire fait une différence majeure :
Type d'accès Performances
Sequential disk 53.2M valeurs/sec
Sequential SSD 42.2M valeurs/sec
Random memory 36.7M valeurs/sec
Random SSD 1924 valeurs/sec
Random disk 316 valeurs/sec
Accès séquentiel disque plus rapide que random memory.
Accès random disque 150 000x plus lent que sequential.
Design de Kafka
Kafka exploite l’accès séquentiel au maximum.
Les messages sont écrits en append-only dans des fichiers de log.
Lecture séquentielle lors de la consommation.
Pas de lecture/écriture aléatoire dans les logs.
OS Cache vs Application Cache
Systèmes modernes ont un cache OS unifié.
Dupliquer le cache au niveau applicatif est inefficace :
graph TB A[Application] --> AC[App Cache] A --> OS[OS Cache] AC --> D[Disk] OS --> D
Gaspillage de mémoire et duplication des données.
Kafka s’appuie sur le cache OS plutôt que de maintenir son propre cache.
Simplifie le code et améliore les performances.
Zero-copy
Kafka utilise la technique zero-copy du système d’exploitation.
Transfert de données disque vers réseau sans copie en user space.
Traditionnel:
Disk → Kernel buffer → User space → Kernel buffer → Network
Zero-copy:
Disk → Kernel buffer → Network
Réduit latence et utilisation CPU.
Implications pour le design
Privilégier algorithmes avec accès séquentiel.
Impact performance croît avec la taille des données.
Pénalité pour accès inefficaces augmente de manière disproportionnée.
Kafka conçu dès le départ pour exploiter ces propriétés.