Bonne journée!Dans cet article, nous envisagerons de configurer un cluster de trois nœuds ZooKeeper (service de coordination de système distribué), dont deux sont des courtiers de messages Kafka , et le troisième est le gestionnaire.En conséquence, le schéma de composants suivant sera mis en œuvre:
Tous les composants sur une seule machine, pour plus de simplicité, nous utiliserons les messages intégrés de l'éditeur (producteur) et de l'abonné (consommateur) de la console.Le module ZooKeeper est intégré au package Kafka, nous l'utilisons.Installation et configuration
Installation du package KafkaDans ce cas, le système d'exploitation est Ubuntu 16.04 LTS.Les versions actuelles et les instructions détaillées sont sur le site officiel .wget http://mirror.linux-ia64.org/apache/kafka/2.4.1/kafka_2.12-2.4.1.tgz
tar -xvzf kafka_2.12-2.4.1.tgz
Créez des répertoires de travail pour les trois nœuds server_1, server_2 et server_3.mv kafka_2.12-2.4.1 kafka_server_1
cp -r kafka_server_1/ kafka_server_2/
cp -r kafka_server_1/ kafka_server_3/
Configuration des nœudsConfiguration d'un courtier Kafka(à partir des répertoires kafka_server_1, kafka_server_2 et kafka_server_3, respectivement)vim config/server.properties
- identifiant du courtier (0, 1, 2 respectivement)
- port client (9092, 9093, 9094)
- Port ZooKeeper (2181, 2182, 2183)
- répertoire des journaux (/ tmp / kafka-logs-1, / tmp / kafka-logs-2, / tmp / kafka-logs-3)
broker.id=0
listeners=PLAINTEXT://:9092
zookeeper.connect=localhost:2181
log.dirs=/tmp/kafka-logs-1
Configuration de Znode:vim config/zookeeper.properties
- répertoire pour les données (/ tmp / zookeeper_1, / tmp / zookeeper_2, / tmp / zookeeper_3)
- port client (2181, 2182, 2183)
- nombre maximal de connexions client et limites de connexion
- ports pour l'échange de données entre les nœuds (c'est-à -dire que nous informons chaque nœud de l'existence des autres)
dataDir=/tmp/zookeeper_1
clientPort=2181
maxClientCnxns=60
initLimit=10
syncLimit=5
tickTime=2000
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
Création de répertoires pour les nœuds ZooKeeper, écriture de l'ID de nœud dans les fichiers de service:mkdir -p /tmp/zookeeper_[1..3]
echo "1" >> /tmp/zookeeper_1/myid
echo "2" >> /tmp/zookeeper_2/myid
echo "3" >> /tmp/zookeeper_3/myid
En cas de problème avec les droits d'accès, changez-les dans les répertoires et fichiers:sudo chmod 777 /tmp/zookeeper_1
Exécution de nœuds z et de courtiers
Pour les deux premiers nœuds (kafka_server_1 /, kafka_server_2 /), exécutez les scripts des serveurs ZooKeeper et Kafka, les arguments sont les fichiers de configuration correspondants:sudo bin/zookeeper-server-start.sh config/zookeeper.properties
sudo bin/kafka-server-start.sh config/server.properties
Pour le troisième nœud (kafka_server_3 /) - uniquement ZooKeeper.Scripts d'arrêt des serveurs:sudo bin/kafka-server-stop.sh
sudo bin/zookeeper-server-stop.sh
Création d'un thème, producteur de console et consommateur
Sujet (sujet) - un flux de messages d'un certain type, divisé en partitions (la quantité est spécifiée par la clé --partition). Chaque partition est dupliquée sur deux serveurs (--replication-factor). Après la clé --bootstrap-server, spécifiez les ports des courtiers Kafka séparés par des virgules. L'option --topic spécifie le nom du sujet.sudo bin/kafka-topics.sh --create --bootstrap-server localhost:9092,localhost:9093 --replication-factor 2 --partitions 2 --topic TestTopic
Pour connaître la liste des rubriques sur le port, des informations sur chaque rubrique peuvent être effectuées avec la commande:sudo bin/kafka-topics.sh --list --zookeeper localhost:2181
sudo bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic TestTopic
Leader - un serveur avec l'instance principale de la partition, réplique - le serveur sur lequel les informations sont dupliquées, ISR - serveurs qui jouent le rôle de leaders en cas de défaillance du leader.Nous créons le producteur de console, le consommateur de console en utilisant les scripts appropriés:sudo bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093 --topic TestTopic
sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9092,localhost:9093 --from-beginning --topic TestTopic
Cela garantit la transmission continue des messages au destinataire, en cas de défaillance d'un courtier de messages traite le second.Services pour zookeeper et kafka dans systemctl
Pour faciliter le démarrage d'un cluster, vous pouvez créer des services dans systemctl: zookeeper_1.service, zookeeper_2.service, zookeeper_3.service, kafka_1.service, kafka_2.service.Nous éditons le fichier /etc/systemd/system/zookeeper_1.service (changez le répertoire / home / user et user user en ceux nécessaires).[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
User=user
ExecStart=home/user/kafka_server_1/bin/zookeeper-server-start.sh /home/user/kafka_server_1/config/zookeeper.properties
ExecStop=/home/user/kafka_server_1/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
Pour les services zookeeper_2.service et zookeeper_3.service, c'est similaire.Fichier /etc/systemd/system/kafka_1.service:[Unit]
Requires=zookeeper.service
After=zookeeper.service
[Service]
Type=simple
User=user
ExecStart=/bin/sh -c '/home/user/kafka_server_1/bin/kafka-server-start.sh /home/user/kafka_server_1/config/server.properties > /tmp/kafka-logs-1 2>&1'
ExecStop=/home/user/kafka_server_1/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
kafka_2.service est similaire.Activation et vérification des servicessystemctl daemon-reload
systemctl enable zookeeper_1.service
systemctl start zookeeper_1.service
sudo journalctl -u zookeeper_1.service
systemctl stop zookeeper_1.service
Il en va de mĂŞme pour zookeeper_2.service, zookeeper_3.service, kafka_1.service, kafka_1.service.Merci pour l'attention!