L’uti­li­sa­tion d’ap­pli­ca­tions, de services Internet, d’ap­pli­ca­tions serveur et autres re­pré­sente pour les dé­ve­lop­peurs un bon nombre de défis. L’un des défis fré­quem­ment ren­con­trés est de pouvoir assurer une trans­mis­sion sans faille et un trai­te­ment rapide et efficace des flux de données. Le logiciel de mes­sa­ge­rie et de streaming Apache Kafka est un logiciel capable d’assumer fa­ci­le­ment ces deux fonctions. Ce logiciel open source, développé à l’origine comme une file d’attente pour les messages destinés à la pla­te­forme LinkedIn, est un pack complet per­met­tant l’en­re­gis­tre­ment, la trans­mis­sion et le trai­te­ment de données.

Qu’est-ce que Apache Kafka ?

Le logiciel Apache Kafka est une ap­pli­ca­tion open source de la fondation Apache, com­pa­tible avec toutes les pla­te­formes, et dont la prin­ci­pale fonction est la cen­tra­li­sa­tion des flux de données. À l’ini­tia­tive de LinkedIn, le projet a vu le jour en 2011 sous le nom du même réseau de business. L’idée était avant tout de dé­ve­lop­per une file d’attente de messages. Depuis la pu­bli­ca­tion du logiciel sous licence libre (Apache 2.0), il a fait l’objet d’un dé­ve­lop­pe­ment intensif qui a trans­formé cette simple file d’attente en une puissante pla­te­forme de streaming associée à une vaste panoplie de fonc­tion­na­li­tés, employée par de grandes en­tre­prises comme Netflix, Microsoft ou Airbnb.

En 2014, l’équipe de dé­ve­lop­peurs de l’équipe Linkedln fonde la société Confluent, qui depuis s’est consacrée au dé­ve­lop­pe­ment de la pla­te­forme Confluent, une version très complète de Apache Kafka. Celle-ci enrichit le programme de fonc­tion­na­li­tés com­plé­men­taires, certaines en open source, d’autres plus com­mer­ciales.

Quelles sont les fonctions de base proposées par Apache Kafka ?

La fonction première d’Apache Kafka est d’optimiser la trans­mis­sion et le trai­te­ment des flux de données qui sont di­rec­te­ment échangés entre le des­ti­na­taire de données et la source. Kafka fait office d’instance de mes­sa­ge­rie entre l’émetteur et le récepteur, et propose des solutions per­met­tant de résoudre les problèmes gé­né­ra­le­ment associés à ce type de connexion.

La pla­te­forme Apache résout ainsi entre autres la dif­fi­culté liée au fait qu’il est im­pos­sible de stocker en mémoire-tampon des données ou des messages, dans le cas où le des­ti­na­taire n’est pas dis­po­nible, par exemple en cas de problèmes avec le réseau. Une file d’attente de messages Kafka permet aussi à l’ex­pé­di­teur de ne pas sur­char­ger le des­ti­na­taire. C’est d’ailleurs toujours le cas lorsque, dans une connexion directe, les in­for­ma­tions sont envoyées plus vite qu’elles ne sont ré­cep­tion­nées et lues. Le logiciel Kafka convient également à des scénarios dans lesquels un message est bien ré­cep­tionné par un système-cible, mais que celui-ci tombe en panne pendant le trai­te­ment du message. Alors que l’ex­pé­di­teur pense avoir réussi son envoi malgré la panne survenue, Apache Kafka l’avertira de l’erreur.

À la dif­fé­rence des services de files d’attente tels qu’ils existent dans les bases de données, le système Apache Kafka est tolérant aux erreurs, ce qui lui permet un trai­te­ment des messages ou des données en mode continu. Le fait qu’Apache Kafka soit par­fai­te­ment adaptable, qu’il soit capable de répartir des in­for­ma­tions sur toutes sortes de systèmes (journal de tran­sac­tions réparties), en fait une solution ex­cel­lente destinée à tous les services né­ces­si­tant un stockage rapide et un trai­te­ment efficace des données, ainsi qu’une bonne dis­po­ni­bi­lité.

Un aperçu de l’ar­chi­tec­ture d’Apache Kafka

L’exécution d’Apache Kafka se fait en tant que Cluster (grappe de serveurs) sur un ou plusieurs serveurs, pouvant concerner dif­fé­rents centres de calculs. Les dif­fé­rents nœuds du cluster, que l’on appelle aussi Broker, stockent et ca­té­go­ri­sent les flux de données en topics. Les données sont ensuite réparties en par­ti­tions avant d’être ré­pli­quées et dis­tri­buées dans le cluster avec un ho­ro­da­teur. De cette manière, la pla­te­forme de streaming assure une ex­cel­lente dis­po­ni­bi­lité et un rapide accès en lecture. Apache Kafka répartit les topics en « Normal Topics » et en « Compacted Topics ». Les topics classés dans la catégorie « Normal topics » peuvent être supprimés, dès que la mémoire tampon ou la limite de mémoire sont dépassées, tandis que les entrées en­re­gis­trées dans les « Compacted Topics » ne sont soumises à aucune limite, ni tem­po­relle, ni en termes d’espace.

Les ap­pli­ca­tions qui éditent des données dans une grappe de serveurs Kafka sont désignés comme pro­duc­teurs (producer), tandis que toutes les ap­pli­ca­tions qui lisent les données d'un cluster Kafka sont appelées des con­som­ma­teurs (consumer). La com­po­sante centrale à laquelle accèdent pro­duc­teurs et con­som­ma­teurs lors du trai­te­ment des flux de données est une bi­blio­thèque Java portant le nom de Kafka Stream. Le fait que le système supporte les écritures tran­sac­tion­nelles permet de ne trans­fé­rer les messages qu’une seule fois (sans doublons), un système qui est qualifié de « exactly-once deliver » (c’est à dire une livraison unique).

Note

La bi­blio­thèque Java Kafka Streams est cer­tai­ne­ment la solution re­com­man­dée pour le trai­te­ment des données dans des clusters Kafka. Vous pouvez aussi utiliser Apache Kafka avec d’autres systèmes pour du streaming et du trai­te­ment de données !

Des éléments tech­niques : les in­ter­faces Kafka

Pour pouvoir offrir aux ap­pli­ca­tions un accès à Apache Kafka, le logiciel propose cinq dif­fé­rentes in­ter­faces :

  • Le pro­duc­teur Kafka : l’API-producer (pro­duc­teur) permet aux ap­pli­ca­tions d’envoyer des flux de données ou des bus de messages d’un cluster Apache, en vue de les ca­té­go­ri­ser et de les en­re­gis­trer (dans les topics existants).
  • Le con­som­ma­teur Kafka : l’API-consumer (con­som­ma­teur) donne aux con­som­ma­teurs Kafka un accès-lecture aux données qui sont en­re­gis­trées dans les topics du cluster.
  • Le stream Kafka : l’API-stream permet à une ap­pli­ca­tion de fonc­tion­ner comme pro­ces­seur de flux, et de trans­for­mer des flux de données entrants en flux de données sortants.
  • Kafka Connect : avec l’API-Connect, il est possible de mettre en place des pro­duc­teurs et con­som­ma­teurs qui relient des topics Kafka à des ap­pli­ca­tions ou des bases de données exis­tantes.
  • Kafka Ad­min­Client : l’interface « Ad­min­Client » permet d’ad­mi­nis­trer et d’inspecter fa­ci­le­ment le cluster Kafka.

La com­mu­ni­ca­tion entre les ap­pli­ca­tions-client et les dif­fé­rents serveurs du Cluster Apache se fait au moyen d’un protocole, simple et per­for­mant, in­dé­pen­dant d’un langage de pro­gram­ma­tion, sur une base TCL. Par défaut, les dé­ve­lop­peurs mettent à dis­po­si­tion un Client Java pour Apache Kafka. Il existe cependant des clients pour d’autres langages, comme le PHP, Python, C/C++, Ruby, Perl ou Go.

Exemples d’ap­pli­ca­tions de Apache Kafka

Apache Kafka a été conçu dès le départ comme un puissant système d’écriture et de lecture. En as­so­cia­tion avec les API que nous avons énumérées, la grande souplesse, l’extrême adap­ta­bi­lité et sa tolérance aux erreurs, ce logiciel open source est une option in­té­res­sante pour toutes sortes d’ap­pli­ca­tion. De ce fait, Apache Kafka est par­ti­cu­liè­re­ment adapté aux domaines suivants :

  • Publier et s’abonner à des flux de données : le projet open source à l’origine d’Apache Kafka con­sis­tait à dé­ve­lop­per un système de mes­sa­ge­rie. Même après l’extension du logiciel, celui-ci reste un excellent outil de transfert de messages au moyen de files d’attentes, mais il convient également à l’émission de messages.
  • Traiter des flux de données : les ap­pli­ca­tions devant réagir en temps réel à des évé­ne­ments spé­ci­fiques doivent pouvoir traiter des flux de données le plus vite et le plus ef­fi­ca­ce­ment possible. Grâce à l’API-Stream, Apache Kafka est une solution qui répond à ces besoins.
  • En­re­gis­trer des flux de données : Apache Kafka peut également servir de système de fichiers distribué. Que les fichiers que vous souhaitez en­re­gis­trer sur le ou les serveurs pèsent 50 ki­looc­tets ou 50 té­raoc­tets n’a aucune im­por­tance.

Tous ces éléments que nous venons d’énumérer peuvent bien sûr être combinés, ce qui permet par exemple d’utiliser Apache Kafka comme une pla­te­forme de streaming plus complexe pour stocker des données, les rendre dis­po­nibles, mais aussi les traiter en temps réel et les associer avec toutes sortes d’ap­pli­ca­tions et de systèmes.

Quelques exemples d’uti­li­sa­tions clas­siques d’Apache Kafka :

  • Système de mes­sa­ge­rie
  • Web-Analytics
  • Système de stockage
  • Pro­ces­seur de stream
  • Event Sourcing
  • Gestion et analyse de fichiers logs
  • Solutions de mo­ni­to­ring
  • Log de tran­sac­tions
Aller au menu principal