Page Wiki sur le serveur de message
Installation de Apache KAFKA
Sur notre serveur virtuel nous avons entré les commandes suivantes:
yum install wget
wget http://apache.crihan.fr/dist/kafka/0.10.2.1/kafka_2.10-0.10.2.1.tgz
tar xzf kafka_2.10-0.10.2.1.tgz
cd kafka_2.10-0.10.2.1/
Maintenant que nous avons installé le package kafka, qui va gérer la file de messages, nous devons installer un zookeeper.
Celui-ci est en charge de réaliser la synchronisation des différents éléments d'un cluster. Il fonctionne sur la base de JAVA, il faut au préalable vérifier que ce dernier est fonctionnel sur notre serveur:
yum install java-1.8.0-openjdk-devel
-> A partir de ce point on peut lire des messages depuis un serveur Kafka (pour certifiant)
La version kafka téléchargée auparavant contient les binaires de Apache Zookeeper, on peut vérifier sa configuration dans le dossier suivant :
config/zookeeper.properties
Lancement des services
Il ne nous reste plus qu'à lancer le service de zookeeper avec la commande suivante :
./bin/zookeeper-server-start.sh ./config/zookeeper.properties
Zookeeper est un serveur avec lequel on peut communiquer sur le port 2181. On peut donc vérifier que Zookeeper a été correctement lancé avec un petit appel telnet:
telnet localhost 2181
Trying 127.0.0.1...
Connected to localhost
Maintenant que le Zookeeper est lancé, nous pouvons lancer le service kafka:
./bin/kafka-server-start.sh ./config/server.properties
Pareil que Zookeeper, on peut vérifier au préalable le fichier de configuration de Kafka. On sait qu'il écoute sur le port 9092:
telnet localhost 9092
Trying 127.0.0.1...
Connected to localhost
==> Nous voilà avec un Zookeeper et un broker Kafka, qui représent un cluster Kafka minimal.
Création d'un topic "test"
Dans Kafka, un message est appelé "Record"; les records sont regroupés par "Topic" ou sujet. On va tout d'abord créé par exemple un topic "test" grâce à un script disponible:
./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Je peux vérifier que le topic est bien créé par une commande "./bin/kafka-topics.sh --list --zookeeper localhost 2181" et on obtient l'affichage suivant:
./bin/kafka-topics.sh --list --zookeeper localhost 2181
test
Ou même afficher les détails du topic:
./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
Echange de messages entre producteurs et consommateurs
Dans Kafka, les messages sont produits par des producers (ou producteurs) et consommés par des consumers (ou consommateurs). On peut "écrire" et "lire" des records (donc message) de la manière suivante:
Sur le producteur : A savoir => Chaque ligne que l'on écrit après cette commande sera considérée comme un message
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
Bonjour comment allez-vous?
Sur le consommateur :
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
A savoir: si on lancer le consumer avant le producer, on verra les messages envoyés par ce dernier en temps réel (avec légère latence). Sinon, tous les messages envoyés avant l'exécution de la commande "consumer" seront mis en buffer.
Pour contrer ça et lire d'un coup tous les messages envoyés par le producer, on peut rajouter l'option "--from-beginning" à la fin de la commande originale:
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning