Qu'est-ce que Apache Kafka ?
Apache Kafka est une plateforme de streaming d'événements distribuée. Elle permet aux applications d'envoyer, stocker et recevoir des flux de données en temps réel, de manière fiable et à grande échelle.
Mais pour comprendre pourquoi Kafka existe, il faut d'abord comprendre le problème qu'il résout.
Le problème : l'intégration de données
La complexité des connexions point-à-point
Dans une architecture traditionnelle, chaque application qui a besoin de données d'une autre application établit une connexion directe. Avec 4 applications, cela reste gérable.
┌─────────┐ ┌─────────┐
│ App A │────▶│ App B │
└─────────┘ └─────────┘
│ │
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│ App C │◀───▶│ App D │
└─────────┘ └─────────┘
Mais les entreprises modernes ont des dizaines, voire des centaines de systèmes : bases de données, applications web, systèmes de paiement, outils d'analytics, services tiers...
L'explosion combinatoire
Avec N systèmes, le nombre de connexions potentielles est N × (N-1). Pour 10 systèmes, cela représente 90 connexions possibles. Pour 50 systèmes : 2450 connexions.
Chaque connexion implique :
- Un protocole de communication à implémenter
- Des formats de données à convertir
- Une gestion des erreurs et des reprises
- Une maintenance continue
C'est ce qu'on appelle le problème du "spaghetti d'intégration".
La solution : un hub central de données
Le principe du découplage
Kafka résout ce problème en introduisant un intermédiaire centralisé. Au lieu de connexions directes entre systèmes, chaque système se connecte uniquement à Kafka.
┌─────────────────┐
│ │
┌─────────┐ │ │ ┌─────────┐
│ App A │────────▶│ │────────▶│ App B │
└─────────┘ │ │ └─────────┘
│ KAFKA │
┌─────────┐ │ │ ┌─────────┐
│ App C │────────▶│ │────────▶│ App D │
└─────────┘ │ │ └─────────┘
│ │
└─────────────────┘
Avec cette architecture :
- Les producteurs (applications qui envoient des données) n'ont pas besoin de connaître les consommateurs
- Les consommateurs (applications qui reçoivent des données) n'ont pas besoin de connaître les producteurs
- L'ajout d'un nouveau système nécessite une seule connexion à Kafka
Comparaison avant/après
| Aspect | Sans Kafka | Avec Kafka |
|---|---|---|
| Connexions | N × (N-1) = O(N²) | 2 × N = O(N) |
| Couplage | Fort (dépendances directes) | Faible (via le hub) |
| Ajout d'un système | Modifier plusieurs systèmes | Une seule connexion |
| Historique des données | Non conservé | Stockage persistant |
Les caractéristiques clés de Kafka
1. Stockage persistant
Contrairement à un système de messaging traditionnel, Kafka conserve les messages même après leur lecture. Les données sont stockées sur disque pour une durée configurable (par défaut 7 jours).
Cela permet :
- De relire l'historique des événements
- De rejouer des données en cas d'erreur
- D'ajouter de nouveaux consommateurs qui traitent les données passées
2. Haute performance
Kafka est conçu pour le haut débit. Un cluster Kafka peut traiter :
- Des millions de messages par seconde
- Des téraoctets de données par jour
- Des milliers de producteurs et consommateurs simultanés
Netflix traite plus de 7 trillions de messages par jour avec Kafka. LinkedIn, qui a créé Kafka, gère plus de 7 pétaoctets de données.
3. Scalabilité horizontale
Kafka est distribué par nature. Pour augmenter la capacité :
- Ajouter des serveurs (brokers) au cluster
- Augmenter le nombre de partitions
- Ajouter des consommateurs
Pas besoin de remplacer le matériel existant : il suffit d'en ajouter.
4. Tolérance aux pannes
Les données sont répliquées sur plusieurs serveurs. Si un serveur tombe en panne :
- Les répliques prennent le relais automatiquement
- Aucune perte de données
- Le service continue sans interruption
Les concepts fondamentaux
Messages (ou Records)
Un message est l'unité de base dans Kafka. Il contient :
| Composant | Description | Exemple |
|---|---|---|
| Key | Identifiant optionnel pour le routage | user-123 |
| Value | Le contenu principal du message | {"action": "login", "timestamp": "..."} |
| Timestamp | Horodatage de création | 1705766400000 |
| Headers | Métadonnées optionnelles | {"source": "mobile-app"} |
Topics
Un topic est une catégorie de messages. C'est comme un dossier ou une file d'attente nommée.
Exemples de topics courants :
orders- Commandes clientsuser-events- Actions des utilisateurspayments- Transactions de paiementlogs- Journaux applicatifs
Les producteurs publient vers un topic. Les consommateurs s'abonnent à un ou plusieurs topics.
Producteurs et Consommateurs
- Producteur (Producer) : Application qui envoie des messages vers Kafka
- Consommateur (Consumer) : Application qui lit des messages depuis Kafka
Un même message peut être lu par plusieurs consommateurs. Chaque consommateur maintient sa propre position de lecture.
Cas d'usage typiques
Streaming d'événements
Capturer les actions utilisateurs en temps réel pour l'analytics, la personnalisation ou la détection de fraude.
Site Web ──▶ Kafka ──▶ Système d'Analytics
└──▶ Moteur de Recommandation
└──▶ Détection de Fraude
Communication entre microservices
Découpler les services d'une architecture microservices pour une meilleure résilience et scalabilité.
Service Commande ──▶ Kafka ──▶ Service Stock
└──▶ Service Notification
└──▶ Service Facturation
Pipeline de données
Transférer des données entre systèmes : bases de données vers data warehouse, logs vers Elasticsearch, etc.
PostgreSQL ──▶ Kafka ──▶ Data Warehouse
└──▶ Elasticsearch
Log aggregation
Centraliser les logs de centaines de serveurs pour l'analyse et le monitoring.
Serveur 1 ─┐
Serveur 2 ─┼──▶ Kafka ──▶ ELK Stack
Serveur 3 ─┘
Qui utilise Kafka ?
Kafka est utilisé par plus de 80% des entreprises du Fortune 100, notamment :
| Entreprise | Usage |
|---|---|
| Netflix | 7+ trillions de messages/jour pour le streaming et la personnalisation |
| Uber | Géolocalisation en temps réel, tarification dynamique |
| Infrastructure de données centrale (créateur de Kafka) | |
| Airbnb | Événements de recherche et réservation |
| Spotify | Recommandations musicales en temps réel |
Résumé
Apache Kafka résout le problème de l'intégration de données à grande échelle en fournissant :
- Un hub centralisé qui découple producteurs et consommateurs
- Un stockage persistant qui permet de relire l'historique
- Une haute performance pour des millions de messages/seconde
- Une scalabilité horizontale par ajout de serveurs
- Une tolérance aux pannes par réplication des données
Prochaines étapes
Pour approfondir votre compréhension de Kafka, consultez les articles suivants de cette série :
- Architecture Kafka : Brokers, Topics et Partitions
- Producers & Consumers : Envoi et lecture de messages
- Consumer Groups : Traitement parallèle et offsets
Cet article fait partie de la série "Fondamentaux Kafka" qui explique les concepts de base de manière progressive et accessible.