[Kafka ] Déployer Kafka avec docker-compose

Qu’est-ce que KAFKA ?

Tout d’abord, la définition wikipedia :

Kafka est utilisé principalement pour la mise en place de « data pipeline » temps réel mais ce n’est pas sa seule application possible dans le monde de l’entreprise. Il est aussi de plus en plus utilisé dans les architectures micro services comme système d’échange, dans la supervision temps réel et dans l’IOT12. Kafka apporte sa capacité à ingérer et diffuser une grande quantité de données, couplé à un framework de data stream processing, il permet le traitement complexe et en temps réel des données.

Je ne vais pas vous expliquez en détaille Kafka, il y a déjà un très bon tuto sur openclassroom : https://openclassrooms.com/fr/courses/4451251-gerez-des-flux-de-donnees-temps-reel/4451521-metamorphosez-vos-applications-temps-reel-avec-kafka

Ce qu’il faut retenir, c’est que Kafka est un bus d’événement qui va vous permettre :

  • Envoyer des messages entre vos différents services peut importe leur langages
  • Gérer vos événements de manière a découpler vos applications . Vous allez pouvoir faire quelque chose de similaire au trigger/bind Javascript. Par exemple
    • Un utilisateur modifie ces coordonnées bancaires via le site web.
    • Vous déclencher un événement avec la modification.
    • Vous développer un service qui écoute cette événement et qui va faire les modifications dans votre base de donnée et notifier l’utilisateur de cette modification.
    • L’intérêt de ce découplage est de pouvoir déclencher cette événement depuis un autre programme. Typiquement dans notre cas, si un utilisateur appel votre société pour qu’un gestionnaire modifie ces coordonnée bancaire, vous déclencherez le même éventement et le programme qui écoute cet événement sera au courant ^^. Vous pouvez également ajouter un autre service qui écoute l’événement, comme par exemple, un service qui va demander un manda SEPA à l’utilisateur.
  • Pouvoir gérer du big data (notamment les logs) et sécuriser vos transmutions de messages

Installer Kafka avec Docker et surtout docker-compose

Docker-compose est parfait pour déployer Kafka et Zookeeper. En effet, votre déploiement serra rapide et facilement scallable. Vous n’aurez qu’a modifier certaines variables de votre fichier docker-compose.yml pour déployer un nouveau cluster sur un autre serveur. Vous pourrez ainsi rapidement monter un nouveau server/cluster Kafka en cas de panne ou de monté en charge.

Nous allons utiliser le travail de wurstmeister qui a créer un dépot git avec tout ce qu’il nous faut pour installer notre cluster et le tester. Merci à lui ! 🙂

J’ai fait les tests sur Ubuntu, Si vous êtes sous Windows ou Mac (ou autres) il se peut que les manipulations soient différentes.

 

Le docker-compose.yml

Vous pouvez télécharger le dépôt suivant :

https://github.com/wurstmeister/kafka-docker

Ou créer le fichier :

Avec le contenu suivant :

 

Nous utilisons deux images, une image Zookeeper et une image Kafka. Les variables d’environnements sont définit de la sorte :

message.max.bytes devient KAFKA_MESSAGE_MAX_BYTES. Donc on prefix nos variables par ‘KAFKA_’ puis on écrit la variable au format  SCREAMING_SNAKE_CASE (pour plus d’information sur les syntaxes de nommages, je vous renvoie vers mon article dédié : http://www.programmation-web.fr/index.php/2019/06/17/les-normes-de-nommages-en-informatique/).

 

Installons et démarrons nos conteneurs

Comme d’habitude exécutez :

et voilà tout est opérationnel ! A bientôt

 😯 Attend, tu va nous laisser avec une installation non testé !?

Mais non, vérifions que tout a fonctionné.

Connecter vous à votre conteneur Kafka

Nous allons simuler un ‘producer’ et un ‘consumer’. pour cela ouvrer deux terminal et connectez-vous à vos conteneurs.

Pour cela, lister vos conteneurs avec la commande ci dessous et repérer le nom du conteneur Kafka:

Attacher votre terminal au bash du conteneur Kafka :

Coté ‘producer’

Nous allons créer un topic et lancer un outil permettant de créer des messages sur ce topic.

Cette commande vous renverra ‘Created topic test.’.

Ensuite démarrons un ‘producer’ qui va publier l’entrée standard dans un topic Kafka passé en paramètre :

Maintenant lorsque vous taper du texte, celui ci sera publié dans le topic test.

 

Coté ‘consumer’

Nous allons lancer un outil permettant de récupérer les messages d’un topic. Exécuter ceci dans votre second terminal :

 

Maintenant retournez dans la fenêtre de votre ‘producer’ et écrivez des messages (appuyez sur ‘Entrée’ pour passer au message suivant). Vous verrez apparaître vos messages dans la fenêtre ‘consumer’.

 

FAQ

(n’hésitez pas a poser vos question en commentaire, je pourrais les ajouter ici)

Quand j’écrit mes message dans les producers il y a temps de latence avant qu’ils ne s’affichent coté consumer, est-ce normal ?

oui c’est normal, par défaut Kafka envoi les messages au consumer toutes les 200 ms.

Quand je démarre mon consumer, les messages déjà publier ne sont pas récupérer, est-ce possible de récupérer les messages envoyé précédemment ?

Oui, il existe plusieurs paramètres (pour ne pas dire de nombreux) lorsque vous lancer votre consumer.

Pour avoir la liste des paramètres, lancer la commande suivante :

Vous pouvez voir que l’option ‘–from-beginning’ permet de récupérer les messages depuis le début.

Je vous conseil fortement d’associer un groupe à votre consumer via l’option ‘–group <String: consumer group id>’ qui va permettre à Kafka de savoir quelles sont message que ce groupe a consommer. Pour plus d’explication je vous renvoie au tuto d’openclasseroom.

Ajouter un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *