Introduction à Apache Kafka

Cet article (et ses futurs petits frères) a pour vocation de vous présenter l’utilisation de Kafka.

Durant les premières parties, je vais simplifier un maximum les concepts de Apache Kafka (et cela peut choquer des gens …).

Apache Kafka

Apache Kafka est un système de messages distribué. Ce dernier est opensource et sous licence Apache. Il a été placé sous la bannière opensource par Linkedin qui continue à contribuer à son développement.

Il est souvent comparé à d’autres systèmes de messages mais Kafka offre bien plus que ces outils.

Il est certainement un des outils les plus appropriés et les plus appréciés pour gérer des messages d’un SI d’entreprise.

Avec l’utilisation d’un tel outil (il en est de même pour ses concurrents), vous supprimez une des choses les plus lourdes d’un SI d’entreprise (ou dans votre application) : *l’adhérence*.

Le fait de savoir que l’information doit être envoyé au composant `C` et à l’application `A` créé un réel problème lorsque l’on veut faire évoluer les applications facilement.

Le concept des messages distribués est simple, je suis le composant `X`, je fais mon travail et je notifie mon environnement via un message. Les composants ou applications intéressés par mon message le récupèrent et travaillent avec. Dans notre cas, le composant `X` ne savait pas à qui il envoyait le message.

Rapides concepts

Kafka permet donc de gérer des messages.

Ces messages sont envoyés par des Producer (Producteur de messages).

Un message donné concerne un sujet, dans Kafka on appelle cela un Topic.

Le Consumer (Consommateur de messages), lui, s’intéresse à un ou plusieurs sujets, il s’abonne donc aux Topics. Il recevra donc tous les messages concernant ces fameux topics.

Kafka est un cluster constitué de Brokers.

Un Broker c’est quoi ?

C’est simplement une instance d’un serveur Kafka.

On peut donc facilement se constituer un cluster Kafka en instanciant les services Kafka.

Cette gestion en cluster permet d’améliorer le partitionnement et la réplication des données.

En quoi c’est utile ?

La partitionnement est important lorsque le volume de données va augmenter.

En utilisant un double partitionnement sur un Topic, on pourra augmenter le “débit” de lecture des messages en rajoutant un consommateur. Un consommateur s’occupera donc d’une partition d’un Topic.

La réplication de données est très utilisée dans les systèmes “clusters”.

Rappelez-vous, une instance Kafka garde les messages … si le serveur sur lequel est lancé le service crash … les données sont perdues. En utilisant la réplication, on s’assure que les données sont disponibles sur un ou plusieurs autres serveurs.

Cela permet aussi de facilement scaler Kafka si le nombre de message augmente ou si on veut accélérer le traitement.

Et là, c’est le drame. Comment Kafka fait-il pour gérer tout ce petit monde ?

Il se base sur Apache Zookeeper (très utilisé dans les systèmes distribués). Pour faire simple, Zookeeper permet de savoir quel service est où … et Kafka lui demande juste : “Hey, il est où mon broker 1”. (J’ai vraiment simplifié le concept).

Le stockage des messages

Gros point positif, Kafka stocke les messages.

Ce stockage est basé sur un structure de données appelé : *LOG*

… Non rien à voir avec les logs applicatifs ou techniques que l’on peut utiliser à coup de log4j.

Il s’agit d’un tableau de messages ordonnés.

L’ordonnancement est réalisé à partir de la date d’arrivé du message.

Chaque message se voit donner un index, dans Kafka on appel cela un offset.

La rétention des messages peut être gérée dans la configuration du cluster Kafka (limite de taille ou limite de temps).