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.