Configuration de cluster ZooKeeper à trois nœuds et courtiers Apache Kafka

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:

image

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 Kafka

Dans 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œuds

Configuration 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 services

systemctl 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!

All Articles