Votre progression
Syllabus
-
-
Objectifs
-
Validations de compétences
-
Public cible
Aucun public cible spécifié pour ce module.
-
Besoins techniques
-
Prérequis
- Aucun prérequis
-
Niveau
-
Historique du module
Aucune action enregistrée
-
Introduction à Apache Kafka
Introduction à Apache Kafka
-
Historique et origines
Apache Kafka a été créé en 2010 par LinkedIn pour résoudre les problèmes de gestion des données en temps réel. Son développement a été initié par Jay Kreps, Neha Narkhede et Jun Rao. Le projet a été open-sourcé en 2011 et est devenu un projet de la Fondation Apache en 2012.
Kafka a été conçu pour répondre aux besoins spécifiques de LinkedIn en matière de traitement de données en temps réel, notamment pour la collecte de logs, les métriques, et les flux de données utilisateur.
-
Qu'est-ce que Kafka ?
Apache Kafka est une plateforme distribuée de diffusion de données en continu, capable de publier, stocker, traiter et souscrire à des flux d'enregistrement en temps réel. Elle est conçue pour gérer des flux de données provenant de plusieurs sources et les fournir à plusieurs utilisateurs simultanément.
Kafka est une solution Open Source de diffusion de données en continu, capable de publier, stocker, traiter et souscrire à des flux d'enregistrement en temps réel.
Architecture de base
graph LR P[Producteurs] -->|publient| T[Topics] T --> B[(Brokers
partitions)] B --> C[Consommateurs] B --> CSchéma : les producteurs publient dans des topics, les brokers les stockent dans leurs partitions, les consommateurs les lisent.
L'architecture de Kafka est composée de quatre composants principaux :
- Producteurs : Envoient des données dans les topics
- Topics : Stockent les données dans des partitions
- Brokers : Gèrent le stockage et la distribution des données
- Consommateurs : Reçoivent et traitent les données
-
Cas d'utilisation courants
- Systèmes de log en temps réel : Collecte et analyse des logs d'applications et de serveurs
- Événements utilisateur : Suivi des actions des utilisateurs dans les applications web et mobiles
- Monitoring et métriques : Collecte et analyse des données de performance
- Intégration de données : Synchronisation entre différents systèmes et bases de données
- Applications IoT : Gestion des données provenant de capteurs et dispositifs connectés
- Plateformes e-commerce : Gestion des événements de panier, commandes et recommandations
-
Architecture de base
L'architecture de Kafka repose sur plusieurs composants clés :
- Brokers : Les nœuds du cluster qui stockent et gèrent les données
- Topics : Les canaux de communication entre producteurs et consommateurs
- Partitions : Les unités de stockage dans les topics qui permettent la parallélisation
- Producteurs : Les applications qui envoient des données
- Consommateurs : Les applications qui lisent les données
-
-
Ressources et liens utiles
-
Architecture
Architecture de base
-
Vue d'ensemble
graph TB subgraph Producteurs P1[App A] P2[App B] end subgraph Cluster B1[(Broker 1)] B2[(Broker 2)] B3[(Broker 3)] end subgraph Consommateurs C1[Traitement 1] C2[Traitement 2] end P1 --> B1 P2 --> B2 B1 --> C1 B2 --> C2 B3 --> C1Vue d'ensemble : plusieurs producteurs alimentent un cluster de brokers, réparti vers les consommateurs.
Kafka est conçu comme une plateforme distribuée, composée de plusieurs composants interconnectés qui travaillent ensemble pour gérer les flux de données.
-
Les composants principaux
Architecture détaillée
graph LR P[Producteurs] -->|append| L[Partition leader] L --> F1[Réplique 1] L --> F2[Réplique 2] Z[Zookeeper / KRaft] -.coordination.-> LComposants : un topic est découpé en partitions, chaque partition est répliquée sur plusieurs brokers, un coordinateur (Zookeeper ou KRaft) maintient l'état du cluster.
L'architecture de Kafka est composée de plusieurs composants interconnectés :
- Broker : Serveur qui stocke et gère les données
- Partitions : Unités de stockage qui divisent les topics
- Producteurs : Applications qui envoient des données
- Consommateurs : Applications qui reçoivent et traitent les données
- Zookeeper : Service de coordination et de configuration
Réplication
graph LR L[(Partition 0 - leader)] --> R1[(Réplique 1)] L --> R2[(Réplique 2)] R1 -.réplication.-> L R2 -.réplication.-> LRéplication : le leader reçoit les écritures et les réplique aux followers ; en cas de panne, un follower est élu leader.
La réplication est un mécanisme essentiel de Kafka qui assure la durabilité et la tolérance aux pannes. Chaque partition est répliquée sur plusieurs brokers, avec un broker leader et plusieurs brokers followers.
Groupes de consommateurs
graph LR T[(Topic - 3 partitions)] --> G1[Groupe A] T --> G2[Groupe B] G1 --> C1[Consommateur 1] G1 --> C2[Consommateur 2] G2 --> C3[Consommateur 3]Groupes de consommateurs : chaque partition est assignée à un seul consommateur d'un groupe ; deux groupes différents relisent donc chacun la totalité du topic.
Les groupes de consommateurs permettent de répartir la charge de traitement entre plusieurs consommateurs. Chaque partition est assignée à un seul consommateur par groupe, garantissant ainsi une consommation exclusive des messages.
Brokers
- Serveurs qui stockent et gèrent les données
- Chaque broker peut gérer plusieurs topics et partitions
- Peuvent être répliqués pour la haute disponibilité
Topics
- Canaux de communication logiques
- Organisés en partitions pour le parallélisme
- Peuvent être répliqués pour la durabilité
Partitions
- Unités de stockage dans les topics
- Chaque partition est un flux ordonné de messages
- Permettent le parallélisme de la consommation
Producteurs
- Applications qui envoient des données
- Peuvent spécifier la partition cible
- Supportent différents modes de confirmation
Consommateurs
- Applications qui lisent les données
- S'abonnent à un ou plusieurs topics
- Peuvent faire partie de groupes de consommateurs
Zookeeper (pour les versions < 3.0)
- Gestionnaire de configuration et de coordination
- Coordonne les brokers et les topics
- Stocke les informations de cluster
-
Modèle de données
Topics et Partitions
graph LR TP[Topic commandes] --> P0[Partition 0] TP --> P1[Partition 1] TP --> P2[Partition 2] P0 --> M0[Messages 0-99] P1 --> M1[Messages 100-199] P2 --> M2[Messages 200-299]Topics et partitions : un topic est un découpage ordonné de partitions ; chaque partition est ordonnée mais il n'y a pas d'ordre global entre partitions.
- Chaque topic est divisé en plusieurs partitions
- Les messages sont distribués entre les partitions
- Les partitions permettent le parallélisme
Messages et Offsets
- Les messages sont immuables
- Chaque message a un offset unique
- Les offsets permettent le suivi de la progression
Organisation des données
- Les messages sont stockés par ordre d'arrivée
- Les offsets garantissent l'ordre des messages
- Les données sont conservées pendant une période configurable
-
Groupes de consommateurs
Principe de base
- Les consommateurs appartiennent à des groupes
- Chaque groupe peut avoir plusieurs consommateurs
- Les messages sont distribués entre les consommateurs d'un groupe
Répartition des partitions
- Les partitions sont réparties entre les consommateurs
- Un seul consommateur par partition dans un groupe
- La répartition est gérée automatiquement
Scénarios
- Si moins de consommateurs que de partitions : certains consommateurs lisent plusieurs partitions
- Si plus de consommateurs que de partitions : certains consommateurs restent inactifs
- Les groupes différents peuvent lire les mêmes messages
-
Scalabilité et haute disponibilité
Scalabilité horizontale
- Ajout de nouveaux brokers
- Augmentation du nombre de partitions
- Équilibrage automatique des charges
Réplication
- Chaque partition peut être répliquée
- Un leader par partition
- Les followers répliquent les données
Tolérance aux pannes
- Les leaders peuvent changer
- Les données sont conservées
- Les consommateurs peuvent continuer à travailler
-
-
Fonctionnalités
Les fonctionnalités clés de Kafka
-
Pub / Sub (Publication/Subscription)
Kafka utilise le modèle pub/sub, où les producteurs envoient des messages dans un topic et les consommateurs peuvent s'abonner à ce topic pour recevoir les messages. Cela permet une communication asynchrone et découplée entre les applications.
Avantages
- Découplage des producteurs et consommateurs
- Flexibilité dans l'ajout de nouveaux consommateurs
- Communication asynchrone
Exemples d'implémentation
- Exemple de producteur (Java)
- Exemple de consommateur (Java)
- Exemple de consommateur (Scala)
- Exemple de Kafka Streams (Scala)
- Producteur avancé (Scala)
- Consommateur avancé (Scala)
- Application de comptage de mots (Scala)
Caractéristiques avancées
- Configuration avancée : Paramètres de performance et de fiabilité
- Opérations asynchrones : Gestion des callbacks et des Futures
- Transformation des données : Fonctions personnalisées et filtrage
- Gestion des erreurs : Try et gestion des exceptions
- Optimisations : Batch processing et mémoire tampon
Exemple d'utilisation
Voici un exemple d'utilisation simple :
// Producteur Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); Producer<String, String> producer = new KafkaProducer<>(props); String logMessage = "[ERROR] " + new Date() + " - Une erreur s'est produite"; ProducerRecord<String, String> record = new ProducerRecord<>("logs-topic", "server-1", logMessage); producer.send(record); // Consommateur Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("group.id", "my-group"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Collections.singletonList("logs-topic")); while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println(record.value()); } consumer.commitSync(); } -
Durabilité
Kafka offre une haute durabilité grâce à la réplication des partitions sur plusieurs brokers. Tu peux configurer le nombre de réplicas pour chaque topic. Un des réplicas est désigné comme le leader (pour les opérations de lecture et d'écriture), et les autres sont des followers qui répliquent les données du leader. Les messages sont stockés sur disque et peuvent être archivés pour garantir la persistance des données, même en cas de redémarrage des brokers.
Configuration
replication.factor: Nombre de réplicas par partitionmin.insync.replicas: Nombre minimum de réplicas qui doivent confirmer l'écriturelog.retention.hours: Durée de rétention des messages
Exemple de configuration
// Création d'un topic avec réplication kafka-topics.sh --create --topic my-topic --partitions 3 --replication-factor 3 --bootstrap-server localhost:9092 -
Tolérance aux pannes
Kafka est conçu pour être tolérant aux pannes. En cas d'arrêt d'un broker, les partitions qu'il héberge (et qui sont leaders) sont reprises par l'un des brokers contenant une réplique à jour (un follower devient le nouveau leader). Les consommateurs et producteurs continuent à interagir avec les partitions restantes sans interruption significative.
Stratégies de récupération
- Élection automatique du nouveau leader
- Redistribution des partitions
- Reprise automatique des consommateurs
Best practices
- Utiliser un facteur de réplication ≥ 3 en production
- Surveiller les métriques de latence
- Configurer des alertes pour les pannes de brokers
-
Scalabilité
Kafka scale horizontalement en ajoutant simplement de nouveaux brokers au cluster. De plus, la division des topics en partitions permet de distribuer la charge de travail entre plusieurs brokers et consommateurs au sein d'un même groupe, atteignant ainsi un haut débit de traitement. Le nombre de partitions peut être ajusté (avec précaution) pour répondre à l'évolution de la demande.
Stratégies de scalabilité
- Ajout de brokers
- Augmentation du nombre de partitions
- Configuration optimale des groupes de consommateurs
Exemple de monitoring
// Métriques importantes à surveiller - broker:messages-in-per-sec - broker:bytes-in-per-sec - broker:bytes-out-per-sec - consumer:lag -
Temps de réponse faible
Kafka est conçu pour offrir des temps de réponse très courts (faible latence), ce qui en fait un outil idéal pour les applications réactives et les processus en temps quasi-réel.
Optimisations de latence
- Configuration des timeouts
- Optimisation des batch sizes
- Configuration du nombre de threads
Exemple de configuration
// Configuration pour la latence Properties props = new Properties(); props.put("linger.ms", "1"); props.put("batch.size", "16384"); props.put("compression.type", "gzip"); -
Sérialisation et Desérialisation
Kafka est agnostique au format des données. Cependant, pour une interopérabilité et une évolution des schémas efficaces, l'utilisation de formats de sérialisation structurés comme Avro, Protocol Buffers ou JSON Schema est fortement recommandée. Kafka utilise des Serializers pour convertir les objets en flux d'octets avant l'envoi et des Deserializers pour effectuer l'opération inverse à la réception.
Exemples de sérialisation
// Avro public class User { private String name; private int age; // getters et setters } // Configuration Properties props = new Properties(); props.put("key.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer"); props.put("value.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer"); -
Garanties de livraison
Kafka offre différentes garanties de livraison configurables :
- At most once (au plus une fois) : Les messages peuvent être perdus mais ne sont jamais redélivrés.
- At least once (au moins une fois) : Les messages peuvent être redélivrés, mais ne sont jamais perdus. C'est la configuration par défaut et la plus courante.
- Exactly once (exactement une fois) : Chaque message est délivré une seule fois aux consommateurs. Ceci est plus complexe à configurer et peut impacter le débit, mais est crucial pour certains cas d'utilisation (transactions financières, par exemple).
Configuration
// Configuration pour exactly-once Properties props = new Properties(); props.put("enable.idempotence", "true"); props.put("transactional.id", "my-transaction-id");
-
-
Exemples concrets
Architecture d'exemple : Traitement des logs en temps réel
Dans une application web, les logs sont générés par le serveur et doivent être stockés et analysés en temps réel. Kafka peut être utilisé pour :
- Décharger les logs depuis le serveur web (en tant que producteurs).
- Stocker les logs dans un topic Kafka.
- Analyser en temps réel via un outil comme Apache Flink ou Spark Streaming (en tant que consommateurs). Ces outils peuvent lire les logs depuis Kafka, effectuer des agrégations, détecter des anomalies et alerter si nécessaire.
Topologie d'exemple : Événements e-commerce
Dans une plateforme de e-commerce, les événements tels que les clics, les ajouts au panier et les commandes sont générés. Kafka peut être utilisé pour :
- Envoyer les événements à travers différents systèmes (comme un système de panier, un système de paiement, un système de recommandation, etc.) en publiant chaque type d'événement dans un topic dédié ou en utilisant un format d'événement unifié.
- Générer des rapports en temps réel sur le trafic, les ventes et le comportement des utilisateurs en consommant les flux d'événements.
- Déclencher des offres promos personnalisées basées sur les comportements des utilisateurs en analysant les flux d'événements en temps réel avec Kafka Streams ou d'autres moteurs de traitement de flux.
Code d'exemple : Configuration de base en Java
// Configuration du producteur Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); try (Producer<String, String> producer = new KafkaProducer<>(props)) { ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "log-id-1", "message-1"); producer.send(record); System.out.println("Message envoyé !"); } catch (Exception e) { e.printStackTrace(); } // Configuration du consommateur Properties consumerProps = new Properties(); consumerProps.put("bootstrap.servers", "localhost:9092"); consumerProps.put("group.id", "my-group"); consumerProps.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); consumerProps.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); consumerProps.put("auto.offset.reset", "latest"); // ou "earliest" pour lire depuis le début try (KafkaConsumer<String, String> consumer = new KafkaConsumer<>(consumerProps)) { consumer.subscribe(Collections.singletonList("my-topic")); while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100)); for (ConsumerRecord<String, String> record : records) { System.out.printf("Offset = %d, Key = %s, Value = %s%n", record.offset(), record.key(), record.value()); } } } -
Implémentation pratique
Implémentation pratique de Kafka
-
Installation et configuration
Prérequis
- Java 8 ou supérieur : Kafka nécessite Java 8 ou une version plus récente
- Zookeeper (versions < 3.0) : Gestionnaire de configuration et de coordination
- Ports disponibles :
- 9092 : Port par défaut pour Kafka
- 2181 : Port par défaut pour Zookeeper
- Espace disque : Au moins 100GB recommandé pour le stockage des données
- Mémoire RAM : Minimum 8GB recommandé pour chaque broker
Installation
# Télécharger la dernière version stable wget https://downloads.apache.org/kafka/3.4.0/kafka_2.13-3.4.0.tgz # Décompresser mkdir kafka && tar -xzf kafka_2.13-3.4.0.tgz -C kafka --strip-components 1 # Démarrer Zookeeper (pour les versions < 3.0) bin/zookeeper-server-start.sh config/zookeeper.properties # Démarrer Kafka bin/kafka-server-start.sh config/server.propertiesConfiguration
Les fichiers de configuration principaux sont :
server.properties: Configuration du brokerzookeeper.properties: Configuration de Zookeeper
Exemple de configuration
Exemple complet de configuration
Paramètres importants
broker.id: Identifiant unique du brokerlog.dirs: Répertoire de stockage des donnéesnum.partitions: Nombre de partitions par défautreplica.fetch.max.bytes: Taille maximale des requêtes de réplication
-
Administration
Commandes utiles
# Créer un topic bin/kafka-topics.sh --create --topic my-topic --partitions 3 --replication-factor 1 --bootstrap-server localhost:9092 # Lister les topics bin/kafka-topics.sh --list --bootstrap-server localhost:9092 # Voir les détails d'un topic bin/kafka-topics.sh --describe --topic my-topic --bootstrap-server localhost:9092 # Produire des messages bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-topic # Consommer des messages bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-topic --group my-group --from-beginningMonitoring
Kafka expose des métriques JMX qui peuvent être surveillées avec des outils comme Prometheus et Grafana.
Métriques importantes
- Broker metrics :
- messages-in-per-sec
- bytes-in-per-sec
- bytes-out-per-sec
- Consumer metrics :
- lag
- records-consumed-rate
- records-lag-max
Alertes recommandées
- Latence élevée des requêtes
- Partitions non répliquées
- Brokers hors ligne
- Retard de consommation
- Broker metrics :
-
Meilleures pratiques
Configuration des topics
- Utiliser des topics dédiés pour différents types de données
- Configurer correctement le nombre de partitions en fonction du débit attendu
- Utiliser des groupes de consommateurs distincts pour des usages différents
- Surveiller les métriques de latence et de débit
- Mettre en place une stratégie de rétention des données adaptée
Performance
- Optimiser la taille des batches
- Utiliser la compression
- Configurer correctement les timeouts
- Optimiser le nombre de threads
Sécurité
- Activer SSL/TLS pour la communication
- Utiliser les ACLs pour contrôler l'accès
- Configurer l'authentification
- Protéger les données sensibles
-
Scalabilité
Ajout de brokers
# Ajouter un nouveau broker bin/kafka-server-start.sh config/server.propertiesRebalancement des partitions
# Créer un fichier de configuration bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --generate --topics-to-move-json-file topics-to-move.json --broker-list "0,1,2" --broker-list "0,1,2,3" # Appliquer le rebalancement bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --execute --reassignment-json-file reassign.jsonMonitoring du rebalancement
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --verify --reassignment-json-file reassign.jsonMeilleures pratiques
- Planifier le rebalancement pendant les heures creuses
- Surveiller les métriques pendant le rebalancement
- Tester le rebalancement sur un environnement de test
- Documenter les changements
-
Télécharger la dernière version stable depuis le site officiel Apache Kafka.
# Décompression de l'archive $ tar -xzf kafka_2.13-3.4.0.tgz $ cd kafka_2.13-3.4.0 # Démarrage de Zookeeper (pour les versions < 3.0) $ bin/zookeeper-server-start.sh config/zookeeper.properties # Démarrage de Kafka $ bin/kafka-server-start.sh config/server.properties -
Configuration
Les fichiers de configuration principaux sont :
server.properties: Configuration du brokerzookeeper.properties: Configuration de Zookeeper
-
Administration
-
Commandes utiles
# Créer un topic $ bin/kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1 # Lister les topics $ bin/kafka-topics.sh --list --bootstrap-server localhost:9092 # Voir les détails d'un topic $ bin/kafka-topics.sh --describe --topic my-topic --bootstrap-server localhost:9092 # Produire des messages $ bin/kafka-console-producer.sh --topic my-topic --bootstrap-server localhost:9092 # Consommer des messages $ bin/kafka-console-consumer.sh --topic my-topic --bootstrap-server localhost:9092 --from-beginning -
Monitoring
Kafka expose des métriques JMX qui peuvent être surveillées avec des outils comme Prometheus et Grafana.
-
-
Meilleures pratiques
- Utiliser des topics dédiés pour différents types de données
- Configurer correctement le nombre de partitions en fonction du débit attendu
- Utiliser des groupes de consommateurs distincts pour des usages différents
- Surveiller les métriques de latence et de débit
- Mettre en place une stratégie de rétention des données adaptée
Garanties de livraison
Kafka offre différentes garanties de livraison configurables :- At most once (au plus une fois) : Les messages peuvent être perdus mais ne sont jamais redélivrés.
- At least once (au moins une fois) : Les messages peuvent être redélivrés, mais ne sont jamais perdus. C'est la configuration par défaut et la plus courante.
- Exactly once (exactement une fois) : Chaque message est délivré une seule fois aux consommateurs. Ceci est plus complexe à configurer et peut impacter le débit, mais est crucial pour certains cas d'utilisation (transactions financières, par exemple).
-
-
Conseils de conception
Conception des topics et partitions
- Définition des topics : Conçoivez les topics en fonction des flux de données et des besoins des consommateurs. Privilégiez des topics spécifiques pour différents types d'événements ou de données, en tenant compte de la granularité nécessaire pour vos consommateurs.
- Nombre de partitions : Le nombre de partitions détermine le parallélisme de la consommation. Un nombre plus élevé permet à plus de consommateurs de travailler en parallèle, mais peut entraîner une surcharge de gestion. Basez-vous sur le débit attendu et le nombre de consommateurs prévus.
- Réplication : Essentielle pour la haute disponibilité, un facteur de réplication de 3 est courant en production, créant 3 copies de chaque partition sur différents brokers, au prix d'une utilisation accrue de l'espace disque.
Paramètres clés
- Équilibrage de charge : Assurez une distribution uniforme des messages entre les partitions à l'aide d'une clé de partitionnement appropriée pour éviter les "hot partitions".
- Stratégies de partitionnement : Choisissez soigneusement votre clé de partitionnement. Par défaut, Kafka utilise un algorithme round-robin, mais une clé métier peut garantir que les événements liés sont traités dans l'ordre par le même consommateur.
- Rétention des données : Configurez la politique de rétention selon vos besoins de conservation (taille ou durée) et prévoyez des stratégies d'archivage vers des systèmes de stockage à long terme (HDFS, S3) si nécessaire.
Sécurité
- Authentification SSL/TLS : Chiffrez les communications entre les brokers et les clients pour assurer la confidentialité des données en transit.
- Autorisation (ACLs) : Utilisez les listes de contrôle d'accès pour définir précisément les autorisations de lecture/écriture sur les topics.
- Chiffrement des données : Envisagez le chiffrement des données au repos pour une sécurité maximale.
- Gestion des secrets : Sécurisez la gestion des informations d'identification et des clés d'authentification.
- Monitoring : Implémentez des systèmes de surveillance pour détecter les accès non autorisés ou les comportements suspects.
Scalabilité
- Ajout de brokers : Augmentez la capacité de stockage et le débit en ajoutant des brokers au cluster. Kafka rééquilibre automatiquement les partitions.
- Gestion des partitions : Augmentez le nombre de partitions pour améliorer le parallélisme (la réduction est plus complexe). Réassigned les partitions dynamiquement pour équilibrer la charge.
- Surveillance : Surveillez les métriques clés (débit, latence, utilisation des ressources) pour anticiper les besoins de montée en charge.
-
Commandes pratiques
Gestion des topics
Créer un topic
kafka-topics.sh --create \ --topic my-topic \ --partitions 3 \ --replication-factor 1 \ --bootstrap-server localhost:9092Lister les topics
kafka-topics.sh --list --bootstrap-server localhost:9092Décrire un topic
kafka-topics.sh --describe \ --topic my-topic \ --bootstrap-server localhost:9092Production et consommation
Produire des messages
kafka-console-producer.sh \ --broker-list localhost:9092 \ --topic my-topicTapez vos messages et appuyez sur Entrée pour les envoyer.
Consommer des messages
kafka-console-consumer.sh \ --bootstrap-server localhost:9092 \ --topic my-topic \ --group my-group \ --from-beginningL'option
--from-beginningpermet de lire les messages depuis le début du topic.Gestion des consommateurs
Lister les groupes de consommateurs
kafka-consumer-groups.sh \ --list \ --bootstrap-server localhost:9092Affiche la liste de tous les groupes de consommateurs.
Voir les décalages (offsets) d'un groupe
kafka-consumer-groups.sh \ --bootstrap-server localhost:9092 \ --group my-group \ --describeAffiche les décalages actuels pour chaque partition consommée par le groupe.
Réinitialiser les offsets d'un groupe
# Réinitialiser au début (earliest) kafka-consumer-groups.sh \ --bootstrap-server localhost:9092 \ --group my-group \ --reset-offsets \ --to-earliest \ --execute \ --topic my-topic # Réinitialiser à la fin (latest) kafka-consumer-groups.sh \ --bootstrap-server localhost:9092 \ --group my-group \ --reset-offsets \ --to-latest \ --execute \ --topic my-topicAttention: Cette opération est irréversible. Utilisez
--dry-runavant pour voir les changements sans les appliquer.Voir le décalage (lag) d'un groupe
kafka-consumer-groups.sh \ --bootstrap-server localhost:9092 \ --group my-group \ --describe \ --members \ --verboseAffiche des informations détaillées sur les membres du groupe et leur retard de consommation.
Supprimer un groupe de consommateurs
kafka-consumer-groups.sh \ --bootstrap-server localhost:9092 \ --delete \ --group my-groupSupprime le groupe et toutes ses métadonnées. Les données des topics ne sont pas supprimées.
Surveillance des consommateurs
Voir les métriques d'un consommateur
# Activer JMX pour exposer les métriques export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" # Lancer le consommateur avec JMX KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS" kafka-console-consumer.sh \ --bootstrap-server localhost:9092 \ --topic my-topic \ --group my-groupConnectez-vous avec JConsole ou un outil similaire sur localhost:9999 pour voir les métriques.
Vérifier la latence de consommation
kafka-consumer-groups.sh \ --bootstrap-server localhost:9092 \ --group my-group \ --describe \ | grep -v "LAG 0"Affiche uniquement les partitions avec un décalage (lag) supérieur à zéro.
-
Exemples de cas d'utilisation
Système de log centralisé : Kafka est largement utilisé comme un pipeline central pour collecter et agréger les logs provenant de diverses sources (applications, serveurs, équipements réseau). Ces logs peuvent ensuite être consommés par des systèmes d'analyse en temps réel, des outils de monitoring ou des systèmes d'sécurité.
Systèmes de notifications en temps réel : Les notifications push pour des applications mobiles ou web, les alertes par e-mail ou SMS peuvent être envoyées via Kafka. Les producteurs émettent des événements de notification dans un topic, et les différents services de notification (pour iOS, Android, email, SMS) consomment ces événements et envoient les notifications correspondantes.
Échange de données transactionnelles : Kafka peut être utilisé dans les processus de paiement et de confirmation de commande pour garantir l'ordre et la consécution des opérations. Bien que Kafka ne soit pas une base de données transactionnelle, il peut assurer la livraison ordonnée des événements, ce qui est crucial pour la cohérence des transactions dans des architectures microservices.
Collecte et traitement de données de capteurs IoT : Dans les applications IoT, un grand nombre de capteurs génèrent des flux de données continus. Kafka peut ingérer ces flux à haute vitesse et les rendre disponibles pour des systèmes de traitement et d'analyse en temps réel (par exemple, pour la surveillance, la maintenance prédictive ou l'optimisation).
Streaming d'événements pour la micro-architecture : Dans une architecture de microservices, Kafka peut servir de colonne vertébrale pour la communication asynchrone basée sur les événements entre les différents services. Cela permet un découplage fort et une meilleure résilience. -
Comparaison avec d'autres technologies
Apache Kafka vs RabbitMQ
Points forts de Kafka
- Débit très élevé
- Persistance à long terme des messages
- Idéal pour le traitement de flux en temps réel
- Meilleur pour l'analyse de données et les architectures événementielles
Points forts de RabbitMQ
- Files d'attente traditionnelles avec routage avancé
- Optimisé pour la gestion des files d'attente
- Livraison garantie des messages
- Meilleur pour le traitement asynchrone et l'intégration d'applications
Apache Kafka vs Apache Pulsar
Avantages de Kafka
- Maturité et large adoption
- Meilleures performances pour les charges de travail simples
- Écosystème riche d'outils et d'intégrations
- Documentation abondante et communauté active
Avantages de Pulsar
- Architecture séparant stockage et calcul
- Multi-locataire natif
- Meilleure évolutivité horizontale
- Idéal pour les environnements cloud natifs
-
Quand choisir Kafka ?
Cas d'utilisation idéaux
- Traitement de flux en temps réel à grande échelle
- Persistance des messages à long terme
- Architectures événementielles
- Traitement de flux continu
- Besoins en débit très élevé avec faible latence
Alternatives à considérer
- Files d'attente simples : RabbitMQ ou Redis
- Messagerie temps réel : NATS ou Redis Pub/Sub
- Environnements cloud natifs : Apache Pulsar
- Écosystème Microsoft Azure : Event Hubs
- Écosystème AWS : Amazon Kinesis ou Amazon MSK
-
Ressources et liens utiles
Exercices, examens et projets
Atelier Big Data
Construire un petit pipeline de données et documenter ses choix.
Obligatoire ConsulterExamen Big Data
Évaluer la compréhension de l'architecture et des outils.
Obligatoire ConsulterProjet fil rouge Big Data
Livrer un pipeline reproductible avec ingestion, stockage et restitution.
Livrables :
- Pipeline
- Schéma de données
- Documentation