Apache Kafka : plateforme de messagerie et de streaming pour des systèmes ultra flexibles

L’utilisation d’applications, de services Internet, d’applications serveur et autres représente pour les développeurs un bon nombre de défis. L’un des défis fréquemment rencontrés est de pouvoir assurer une transmission sans faille et un traitement rapide et efficace des flux de données. Le logiciel de messagerie et de streaming Apache Kafka est un logiciel capable d’assumer facilement ces deux fonctions. Ce logiciel open source, développé à l’origine comme une file d’attente pour les messages destinés à la plateforme LinkedIn, est un pack complet permettant l’enregistrement, la transmission et le traitement de données.

Qu’est-ce que Apache Kafka ?

Le logiciel Apache Kafka est une application open source de la fondation Apache, compatible avec toutes les plateformes, et dont la principale fonction est la centralisation des flux de données. À l’initiative 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évelopper une file d’attente de messages. Depuis la publication du logiciel sous licence libre (Apache 2.0), il a fait l’objet d’un développement intensif qui a transformé cette simple file d’attente en une puissante plateforme de streaming associée à une vaste panoplie de fonctionnalités, employée par de grandes entreprises comme Netflix, Microsoft ou Airbnb.

Pour afficher cette vidéo, des cookies de tiers sont nécessaires. Vous pouvez consulter et modifier vos paramètres de cookies ici.

En 2014, l’équipe de développeurs de l’équipe Linkedln fonde la société Confluent, qui depuis s’est consacrée au développement de la plateforme Confluent, une version très complète de Apache Kafka. Celle-ci enrichit le programme de fonctionnalités complémentaires, certaines en open source, d’autres plus commerciales.

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

La fonction première d’Apache Kafka est d’optimiser la transmission et le traitement des flux de données qui sont directement échangés entre le destinataire de données et la source. Kafka fait office d’instance de messagerie entre l’émetteur et le récepteur, et propose des solutions permettant de résoudre les problèmes généralement associés à ce type de connexion.

La plateforme Apache résout ainsi entre autres la difficulté liée au fait qu’il est impossible de stocker en mémoire-tampon des données ou des messages, dans le cas où le destinataire n’est pas disponible, par exemple en cas de problèmes avec le réseau. Une file d’attente de messages Kafka permet aussi à l’expéditeur de ne pas surcharger le destinataire. C’est d’ailleurs toujours le cas lorsque, dans une connexion directe, les informations sont envoyées plus vite qu’elles ne sont réceptionnées et lues. Le logiciel Kafka convient également à des scénarios dans lesquels un message est bien réceptionné par un système-cible, mais que celui-ci tombe en panne pendant le traitement du message. Alors que l’expéditeur pense avoir réussi son envoi malgré la panne survenue, Apache Kafka l’avertira de l’erreur.

Pour afficher cette vidéo, des cookies de tiers sont nécessaires. Vous pouvez consulter et modifier vos paramètres de cookies ici.

À la diffé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 traitement des messages ou des données en mode continu. Le fait qu’Apache Kafka soit parfaitement adaptable, qu’il soit capable de répartir des informations sur toutes sortes de systèmes (journal de transactions réparties), en fait une solution excellente destinée à tous les services nécessitant un stockage rapide et un traitement efficace des données, ainsi qu’une bonne disponibilité.

Un aperçu de l’architecture 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 différents centres de calculs. Les différents nœuds du cluster, que l’on appelle aussi Broker, stockent et catégorisent les flux de données en topics. Les données sont ensuite réparties en partitions avant d’être répliquées et distribuées dans le cluster avec un horodateur. De cette manière, la plateforme de streaming assure une excellente disponibilité 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 enregistrées dans les « Compacted Topics » ne sont soumises à aucune limite, ni temporelle, ni en termes d’espace.

Les applications qui éditent des données dans une grappe de serveurs Kafka sont désignés comme producteurs (producer), tandis que toutes les applications qui lisent les données d'un cluster Kafka sont appelées des consommateurs (consumer). La composante centrale à laquelle accèdent producteurs et consommateurs lors du traitement des flux de données est une bibliothèque Java portant le nom de Kafka Stream. Le fait que le système supporte les écritures transactionnelles permet de ne transfé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 bibliothèque Java Kafka Streams est certainement la solution recommandée pour le traitement des données dans des clusters Kafka. Vous pouvez aussi utiliser Apache Kafka avec d’autres systèmes pour du streaming et du traitement de données !

Des éléments techniques : les interfaces Kafka

Pour pouvoir offrir aux applications un accès à Apache Kafka, le logiciel propose cinq différentes interfaces :

  • Le producteur Kafka : l’API-producer (producteur) permet aux applications d’envoyer des flux de données ou des bus de messages d’un cluster Apache, en vue de les catégoriser et de les enregistrer (dans les topics existants).
  • Le consommateur Kafka : l’API-consumer (consommateur) donne aux consommateurs Kafka un accès-lecture aux données qui sont enregistrées dans les topics du cluster.
  • Le stream Kafka : l’API-stream permet à une application de fonctionner comme processeur de flux, et de transformer 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 producteurs et consommateurs qui relient des topics Kafka à des applications ou des bases de données existantes.
  • Kafka AdminClient : l’interface « AdminClient » permet d’administrer et d’inspecter facilement le cluster Kafka.

La communication entre les applications-client et les différents serveurs du Cluster Apache se fait au moyen d’un protocole, simple et performant, indépendant d’un langage de programmation, sur une base TCL. Par défaut, les développeurs mettent à disposition 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’applications 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 association avec les API que nous avons énumérées, la grande souplesse, l’extrême adaptabilité et sa tolérance aux erreurs, ce logiciel open source est une option intéressante pour toutes sortes d’application. De ce fait, Apache Kafka est particulièrement adapté aux domaines suivants :

  • Publier et s’abonner à des flux de données : le projet open source à l’origine d’Apache Kafka consistait à développer un système de messagerie. 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 applications devant réagir en temps réel à des événements spécifiques doivent pouvoir traiter des flux de données le plus vite et le plus efficacement possible. Grâce à l’API-Stream, Apache Kafka est une solution qui répond à ces besoins.
  • Enregistrer des flux de données : Apache Kafka peut également servir de système de fichiers distribué. Que les fichiers que vous souhaitez enregistrer sur le ou les serveurs pèsent 50 kilooctets ou 50 téraoctets n’a aucune importance.

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 plateforme de streaming plus complexe pour stocker des données, les rendre disponibles, mais aussi les traiter en temps réel et les associer avec toutes sortes d’applications et de systèmes.

Quelques exemples d’utilisations classiques d’Apache Kafka :

  • Système de messagerie
  • Web-Analytics
  • Système de stockage
  • Processeur de stream
  • Event Sourcing
  • Gestion et analyse de fichiers logs
  • Solutions de monitoring
  • Log de transactions