Le logiciel open source Apache Kafka compte parmi les meil­leures solutions pour stocker et traiter des flux de données. La pla­te­forme de mes­sa­ge­rie et de streaming, dis­po­nible sous la licence Apache 2.0, vous séduira par sa tolérance aux erreurs, son extrême adap­ta­bi­lité et sa re­mar­quable vitesse de lecture et d’écriture. À la base de cette pla­te­forme destinée aux ap­pli­ca­tions Big-Data se trouve une grappe de serveurs (Cluster) qui permet d’en­re­gis­trer et de répliquer des données de manière répartie. Il existe quatre in­ter­faces dif­fé­rentes per­met­tant de com­mu­ni­quer avec le cluster au moyen d’un simple protocole TCP.

Dans ce tutorial Kafka, nous vous aidons à faire vos premiers pas avec cette ap­pli­ca­tion dé­ve­lop­pée en Scala, à commencer par l’ins­tal­la­tion de Kafka et du logiciel de syn­chro­ni­sa­tion Apache ZooKeeper.

Con­di­tions pour pouvoir utiliser Apache Kafka

Pour pouvoir utiliser un cluster Kafka per­for­mant, vous avez besoin d’un matériel aux per­for­mances cor­res­pon­dantes. L’équipe des dé­ve­lop­peurs re­com­mande l’uti­li­sa­tion de machines équipées d’Intel Xeon avec un Quad-Core et 24 Go de mémoire de travail. Disposer d’une bonne mémoire est impératif pour pouvoir à tout moment assurer la mémoire-tampon des accès en lecture et écriture de toutes les ap­pli­ca­tions actives sur le cluster. Parmi les prin­ci­paux atouts d’Apache Kafka, il convient de men­tion­ner l’important débit de données, ce qui justifie également le choix de disques durs efficaces et per­for­mants. La fondation Apache Software re­com­mande des disques durs de type SATA (8 x 7200 tr/min) et ce pour éviter tout « goulot d’étran­gle­ment » dans le flux des données. La qualité des flux dépend donc de la qualité des disques durs.

En matière de logiciels, il y a aussi quelques con­di­tions à respecter pour pouvoir utiliser Apache Kafka dans le trai­te­ment de flux de données entrants et sortants. Pour le choix du système d’ex­ploi­ta­tion, nous vous con­seil­lons d’opter pour un système UNIX, comme par exemple Solaris ou une dis­tri­bu­tion Linux, car les pla­te­formes Windows ne sont que par­tiel­le­ment com­pa­tibles. Étant donné que Kafka a été développé sur une base Java, avec le langage de pro­gram­ma­tion Scala, vous devrez installer une version réac­tua­li­sée du Kit de dé­ve­lop­pe­ment Java SE (JDK) sur votre machine. Il en va de même pour votre en­vi­ron­ne­ment d’exécution Java qui permet d’exécuter des ap­pli­ca­tions Java sur votre or­di­na­teur. Vous aurez né­ces­sai­re­ment besoin aussi du service Apache ZooKeeper, un uti­li­taire qui permet la syn­chro­ni­sa­tion de processus répartis.

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

Tutoriel Apache Kafka : comment installer Kafka, ZooKeeper et Java ?

Nous vous avons expliqué pré­cé­dem­ment dans ce tutoriel Kafka de quels logiciels vous aviez besoin. Sauf si celui-ci a déjà été installé sur votre or­di­na­teur, nous allons commencer par installer l’en­vi­ron­ne­ment d’exécution Java. Plusieurs nouvelles versions des dis­tri­bu­tions Linux, comme par exemple Ubuntu (que nous allons utiliser à titre d’exemple comme système d’ex­ploi­ta­tion dans le présent tutorial) disposent avec OpenJDK d’une im­plé­men­ta­tion JDK gratuite dans le pack de référence officiel. Vous pouvez donc installer le kit de Java tout sim­ple­ment de cette manière en tapant la commande suivante dans le terminal :

sudo apt-get install openjdk-8-jdk

Dès que l’ins­tal­la­tion de Java est terminée, vous con­ti­nue­rez par installer le service de syn­chro­ni­sa­tion Apache ZooKeeper. Celui-ci est également dis­po­nible dans le ré­per­toire Ubuntu comme un pack prêt à l’emploi que vous pourrez exécuter au moyen de la ligne de commande suivante :

sudo apt-get install zookeeperd

Une commande permet d’ailleurs de vérifier ensuite que le service ZooKeeper a bien été activé :

sudo systemctl status zookeeper

Si Apache ZooKeeper fonc­tionne, le résultat affiché sera le suivant :

Si le service de syn­chro­ni­sa­tion ne fonc­tionne pas, vous pouvez à tout moment le démarrer à l’aide de la commande suivante :

sudo systemctl start zookeeper

Pour que ZooKeeper soit au­to­ma­ti­que­ment activé au démarrage de votre or­di­na­teur, vous devez l’en­re­gis­trer comme programme par défaut au démarrage :

sudo systemctl enable zookeeper

Pour finir, vous devez en­re­gis­trer un profil d’uti­li­sa­teur Kafka qui vous sera utile plus tard lorsque vous devrez accéder au serveur. Ouvrez à nouveau le terminal et tapez la commande suivante ;

sudo useradd kafka -m

Avec le ges­tion­naire de mots de passe passwd, assignez à l’uti­li­sa­teur un mot de passe en tapant la commande suivante, suivie du mot de passe de votre choix :

sudo passwd kafka

L’étape suivante consiste à accorder à l’uti­li­sa­teur des droits sudo « Kafka » :

sudo adduser kafka sudo

À tout moment, vous pourrez vous connecter avec le nouveau profil d’uti­li­sa­teur que vous avez créé :

su – kafka

Le moment est venu de té­lé­char­ger et d’installer Kafka. Il existe plusieurs em­pla­ce­ments fiables où vous pouvez té­lé­char­ger des versions anciennes ou plus récentes du logiciel de streaming et de stockage. Vous pouvez aussi té­lé­char­ger les fichiers d'ins­tal­la­tion di­rec­te­ment à la source, par exemple dans l’espace de té­lé­char­ge­ment de la fondation Apache Software. Nous vous re­com­man­dons de toujours utiliser une version mise à jour de Kafka. Pour ce faire, ajoutez dans votre terminal une ligne de commande per­met­tant la mise à jour du logiciel. Peut-être faut-il l’ajuster dans certains cas.

wget http://www.apache.org/dist/kafka/2.1.0/kafka_2.12-2.1.0.tgz

Comme le fichier té­lé­chargé est un fichier compressé, vous devez le dé­com­pres­ser :

sudo tar xvzf kafka_2.12-2.1.0.tgz --strip 1

Grâce au paramètre « --strip 1 » les fichiers dé­com­pres­sés seront di­rec­te­ment extraits et en­re­gis­trés dans le dossier « ~/kafka ». Dans le cas contraire, et dans le cas précis de ce tutoriel, Ubuntu en­re­gis­trera tous les fichiers dans le ré­per­toire « ~/kafka/kafka_2.12-2.1.0 ». Vous devez avoir pré­cé­dem­ment créé avec mkdir un ré­per­toire nommé « kafka » et ensuite accéder à ce ré­per­toire avec la fonction cd kafka.

Apache Kafka : tutoriel pour pa­ra­mé­trer le système de streaming et de mes­sa­ge­rie

Après avoir installé Apache Kafka, l’en­vi­ron­ne­ment d’exécution Java et ZooKeeper, vous pouvez nor­ma­le­ment lancer le service Kafka. Avant de le faire, nous vous con­seil­lons de lancer quelques petites con­fi­gu­ra­tions pour que le logiciel soit optimisé en vue des tâches qui vont lui être assignées.

Valider la sup­pres­sion des topics

Dans sa con­fi­gu­ra­tion par défaut, Kafka ne permet pas de supprimer des topics, c’est à dire des messages organisés en catégorie dans un cluster Kafka. Cette fonction peut cependant être activée au moyen du fichier de con­fi­gu­ra­tion de Kafka, le fichier server.pro­per­ties. Ce fichier qui se trouve dans le dossier « Config » peut être ouvert dans l’éditeur de texte nano au moyen de la ligne de commande suivante :

sudo nano ~/kafka/config/server.properties

Tout en bas de ce fichier de con­fi­gu­ra­tion, insérez une nouvelle ligne pour permettre la sup­pres­sion de topics Kafka.

delete.topic.enable=true
Conseil

N’oubliez pas d’en­re­gis­trer l’ajout de cette nouvelle ligne dans le fichier de con­fi­gu­ra­tion de Kafka, avant de quitter l’éditeur de texte nano !

Ajouter les fichiers .service pour ZooKeeper et Kafka

La prochaine étape de ce tutoriel Kakfa consiste à créer des fichiers d’unité pour ZooKeeper et Kafka, des fichiers qui per­met­tent de lancer des actions courantes de ces deux services, de les arrêter ou de les relancer, en fonction d’autres services Linux. Il est donc né­ces­saire, et ce pour les deux ap­pli­ca­tions, de créer et de pa­ra­mé­trer des fichiers .service pour le ges­tion­naire de session.

Voici comment créer un fichier ZooKeeper com­pa­tible avec le ges­tion­naire de session Ubuntu systemd

Commencez par créer le fichier pour le service de syn­chro­ni­sa­tion ZooKeeper, en tapant la commande suivante dans le terminal :

sudo nano /etc/systemd/system/zookeeper.service

Cette fonction permet non seulement de créer le fichier, mais de l’ouvrir aussitôt dans l’éditeur nano. Entrez-y les lignes suivantes et en­re­gis­trez ensuite le fichier :

[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
User=kafka
ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target

systemd comprend ainsi qu’il ne doit pas démarrer ZooKeeper avant que le réseau et le système de fichiers définis dans la partie [Unit] soient prêts. La partie [Service] précise que le ges­tion­naire de session doit utiliser les fichiers zookeeper-server-start.sh et zookeeper-server-stop.sh pour res­pec­ti­ve­ment démarrer et arrêter ZooKeeper. Un re­dé­mar­rage au­to­ma­tique est par ailleurs envisagé en cas d’arrêt imprévu du service. La ligne [Install] détermine le démarrage du fichier. Par défaut, la valeur employée en cas d’une uti­li­sa­tion multiple (par exemple avec un serveur) est « multi-user.target ».

Comment créer un fichier Kafka destiné au ges­tion­naire de session Ubuntu

Le fichier .service pour Apache Kafka est créé avec la ligne de commande suivante :

sudo nano /etc/systemd/system/kafka.service

Copiez ensuite le contenu suivant dans le nouveau fichier que vous avez pré­cé­dem­ment ouvert avec l’éditeur nano :

[Unit]
Requires=zookeeper.service
After=zookeeper.service
[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target

Dans le champ [Unit] de ce fichier, on précise la dé­pen­dance des services Kafka par rapport à ZooKeeper. Cela permet de s’assurer que le service de syn­chro­ni­sa­tion démarre bien dès que le fichier kafka.service est exécuté. La ligne [Service] renferme les scripts Shell kafka-server-start.sh et kafka-server-stop.sh qui dé­ter­mi­nent res­pec­ti­ve­ment le démarrage et l’arrêt du serveur Kafka. On y trouve également les in­for­ma­tions qui con­cer­nent le re­dé­mar­rage au­to­ma­tique en cas de perte de connexion, ainsi que les données con­cer­nant les systèmes à uti­li­sa­teurs multiples.

Kafka : premier démarrage et création d’un premier en­re­gis­tre­ment d’auto-lancement

Après avoir en­re­gis­tré les données du ges­tion­naire de session pour Kafka et ZooKeeper, vous pouvez lancer Kafka de la manière suivante :

sudo systemctl start kafka

Le programme systemd utilise par défaut un protocole ou journal cen­tra­lisé, dans lequel sont en­re­gis­trés au­to­ma­ti­que­ment tous les messages de type log. Cela vous permet de vérifier au besoin que le serveur Kafka a bien démarré comme vous le sou­hai­tiez.

sudo journalctl -u kafka

Le résultat doit être ap­proxi­ma­ti­ve­ment le suivant :

Si le démarrage manuel d’Apache Kafka fonc­tionne, vous devez encore activer le lancement au­to­ma­tique dans le cadre d’un boot système.

sudo systemctl enable kafka

Tutoriel Apache Kafka : les premiers pas avec Apache Kafka

Pour tester Apache Kafka à ce niveau de pro­gres­sion du tutoriel, vous pouvez éditer un message au moyen de la pla­te­forme de mes­sa­ge­rie. Pour ce faire, vous avez besoin d’un Producer (pro­duc­teur) et d’un Consumer (con­som­ma­teur), c’est à dire une instance qui permette la rédaction et la pu­bli­ca­tion de données sous forme de topics, ainsi qu’une instance capable de lire un topic. Commencez par créer le topic que nous ap­pel­le­rons Tu­to­rial­To­pic. Comme il s’agit d’un simple test, il ne con­tien­dra qu’une seule partition et une seule réplique :

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic

Dans un deuxième temps, vous allez créer un Producer qui ajoutera au topic que vous venez de créer un premier message : « Coucou tout le monde ! » Pour ce faire, vous uti­li­se­rez le script Shell kafka-console-producer.sh qui répond au nom de l’or­di­na­teur et au port du serveur (dans l’exemple : chemin par défaut Kafka) ainsi qu’au nom du topic :

echo "Coucou tout le monde !" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

Avec le script kafka-console-consumer.sh, créez ensuite un con­som­ma­teur Kafka qui traite les messages de Tu­to­rial­To­pic et qui les fait suivre. Encore une fois, les arguments né­ces­saires seront le nom de l’or­di­na­teur, le port du serveur Kafka et le nom du topic. Ajoutez l’argument « --from-beginning » pour que le message « Coucou tout le monde ! » qui avait été publié avant le démarrage du con­som­ma­teur, puisse ef­fec­ti­ve­ment être traité par celui-ci.

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning

Le terminal affiche donc le message « Coucou tout le monde ! » tandis que le script continue à « tourner » dans l’attente de nouveaux messages pouvant être publiés dans ce topic test. Ouvrez une autre fenêtre de terminal dans laquelle vous simulez d’autres données de la part du pro­duc­teur. Vous les verrez alors s’afficher dans le terminal où est exécuté le script du con­som­ma­teur.

Aller au menu principal