Qu'est-ce que Kafka ?
Apache Kafka est un magasin de données distribué optimisé pour l'ingestion et le traitement des données diffusées en temps réel. Les données diffusées en continu sont des données générées en continu par des milliers de sources de données, qui envoient simultanément des enregistrements de données. Une plateforme de streaming doit gérer cet afflux constant de données et les traiter de façon séquentielle et progressive.
Kafka propose trois fonctions principales à ses utilisateurs :
- la publication et l'abonnement à des flux d'enregistrements ;
- le stockage efficace des flux d'enregistrements dans l'ordre dans lequel les enregistrements ont été générés ;
- le traitement des flux d'enregistrements en temps réel.
Kafka est principalement utilisé pour créer des pipelines de données de streaming en temps réel et des applications qui s'adaptent aux flux de données. Le service combine la messagerie, le stockage et le traitement des flux pour permettre le stockage et l'analyse des données à la fois historiques et en temps réel.
À quoi sert Kafka ?
Kafka est utilisé pour créer des pipelines de données de streaming en temps réel. Un pipeline de données traite et déplace les données de manière fiable d'un système à un autre, et une application de streaming est une application qui consomme des flux de données. Par exemple, si vous souhaitez créer un pipeline de données qui intègre les données d'activité des utilisateurs afin de suivre la façon dont les internautes utilisent votre site web en temps réel, Kafka sera utilisé pour ingérer et stocker des données en streaming tout en diffusant des lectures pour les applications qui alimentent le pipeline de données. Kafka est également souvent utilisé comme solution d'agent de messages, c'est-à-dire une plateforme qui traite et assure la communication entre deux applications.
Comment fonctionne Kafka ?
Kafka combine deux modèles de messagerie, la mise en file d'attente et la publication-abonnement, afin de fournir aux consommateurs les principaux avantages de chacun. La mise en file d'attente permet de répartir le traitement des données entre de nombreuses instances consommateurs, pour une capacité de mise à l'échelle élevée. Cependant, les files d'attente traditionnelles ne sont pas multi-abonnés. L'approche publication-abonnement est multi-abonnés, mais comme chaque message est envoyé à chaque abonné, ils ne peuvent pas être utilisés pour répartir le travail entre plusieurs processus de travail. Kafka utilise un modèle de journal partitionné pour assembler ces deux solutions. Un journal est une séquence ordonnée d'enregistrements, et ces journaux sont divisés en segments, ou partitions, qui correspondent à différents abonnés. Cela signifie qu'il peut y avoir plusieurs abonnés à la même rubrique et que chacun se voit attribuer une partition pour permettre une plus grande capacité de mise à l'échelle. Enfin, le modèle de Kafka assure la rejouabilité, ce qui permet à plusieurs applications indépendantes lisant à partir de flux de données de fonctionner de manière indépendante à leur propre rythme.
Mise en file d'attente
Publication-abonnement
Quels sont les avantages de l'approche de Kafka ?
Evolutif
Le modèle de journal partitionné de Kafka permet de distribuer les données sur plusieurs serveurs, ce qui les rend évolutives au-delà de ce que pourrait contenir un seul serveur.
Rapide
Kafka découple les flux de données de manière à obtenir une latence très faible, ce qui les rend extrêmement rapides.
Durable
Les partitions sont distribuées et répliquées sur de nombreux serveurs, et les données sont toutes écrites sur disque. Cela permet de se protéger contre les pannes du serveur, ce qui rend les données très durables et résistantes aux pannes.
Comment l'architecture de Kafka intègre-t-elle les différents modèles ?
Kafka fournit ces deux modèles différents en publiant des documents sur des rubriques différentes. Chaque rubrique possède un journal partitionné, qui est un journal de validation structuré qui assure le suivi de tous les enregistrements dans l'ordre et en ajoute de nouveaux en temps réel. Ces partitions sont distribuées et répliquées sur plusieurs serveurs, ce qui permet une mise à l'échelle, une tolérance aux pannes et un parallélisme élevés. Chaque consommateur se voit attribuer une partition dans la rubrique, ce qui permet d'avoir plusieurs abonnés tout en maintenant l'ordre des données. En combinant ces modèles de messagerie, Kafka offre les avantages des deux. Kafka agit également comme un système de stockage très évolutif et tolérant aux pannes en écrivant et en répliquant toutes les données sur disque. Par défaut, Kafka conserve les données stockées sur le disque jusqu'à ce qu'il n'y ait plus d'espace disponible, mais l'utilisateur peut également définir une limite de conservation. Kafka dispose de quatre API :
- l'API Producer, utilisée pour publier un flux d'enregistrements sur une rubrique Kafka ;
- l'API Consumer, utilisée pour s'abonner à des rubriques et traiter leurs flux d'enregistrements ;
- l'API Streams, qui permet aux applications de se comporter comme des processeurs de flux, qui reçoivent un flux d'entrée provenant de rubriques et le transforment en un flux de sortie qui entre dans différentes rubriques de sortie.
- l'API Connector, qui permet aux utilisateurs d'automatiser de manière fluide l'ajout d'une autre application ou d'un autre système de données à leurs rubriques Kafka existantes.
Quelles sont les différences entre Apache Kafka et RabbitMQ ?
RabbitMQ est un agent de messages open source qui utilise une approche de file d'attente de messagerie. Les files d'attente sont réparties sur un cluster de nœuds et peuvent être répliquées, chaque message n'étant délivré qu'à un seul client.
Caractéristiques |
Apache Kafka |
RabbitMQ |
Architecture |
Kafka utilise un modèle de journal partitionné, qui combine les approches de file d'attente de messagerie et de publication-abonnement. |
RabbitMQ utilise une file d'attente de messagerie. |
Capacité de mise à l’échelle |
Kafka assure la mise à l'échelle en permettant aux partitions d'être distribuées sur différents serveurs. |
Augmentez le nombre de consommateurs dans la file d'attente pour étendre le traitement à ces consommateurs concurrents. |
Conservation des messages |
Basé sur des règles ; par exemple, les messages peuvent être conservés pendant une journée. L'utilisateur peut configurer cette fenêtre de conservation. |
Basé sur les connaissances, ce qui signifie que les messages sont supprimés au fur et à mesure qu'ils sont consommés. |
Plusieurs consommateurs |
Plusieurs consommateurs peuvent s'abonner à la même rubrique, car Kafka permet de rejouer le même message pendant une période donnée. |
Plusieurs consommateurs ne peuvent pas tous recevoir le même message, car les messages sont supprimés au fur et à mesure qu'ils sont consommés. |
Réplication |
Les rubriques sont automatiquement répliquées, mais l'utilisateur peut configurer manuellement les rubriques pour qu'elles ne soient pas répliquées. |
Les messages ne sont pas automatiquement répliqués, mais l'utilisateur peut les configurer manuellement pour qu'ils soient répliqués. |
Ordre des messages |
Chaque consommateur reçoit les informations dans l'ordre en raison de l'architecture des journaux partitionnés. |
Les messages sont transmis aux consommateurs dans l'ordre de leur arrivée dans la file d'attente. S'il y a des consommateurs concurrents, chaque consommateur traite un sous-ensemble de ce message. |
Protocoles |
Kafka utilise un protocole binaire via TCP. |
Advanced Message Queuing Protocol (AMQP) avec support via des plug-ins : MQTT, STOMP. |
Comment AWS peut-il répondre à vos exigences en matière de Kafka ?
Pour en savoir plus sur le déploiement manuel de Kafka sur AWS, cliquez ici.
AWS propose également Amazon MSK, le service entièrement géré le plus compatible, le plus disponible et le plus sécurisé pour Apache Kafka, qui permet aux clients de remplir des lacs de données, de diffuser les modifications depuis et vers les bases de données et d'alimenter des applications de machine learning et d'analyse. Avec Amazon MSK, les clients peuvent passer moins de temps à gérer l'infrastructure et plus de temps à créer des applications. Découvrez-en davantage sur Amazon MSK.