ZooKeeper-Clusterkonfiguration mit drei Knoten und Apache Kafka-Broker

Schönen Tag!

In diesem Artikel wird die Einrichtung eines Clusters von drei ZooKeeper- Knoten (Distributed System Coordination Service) in Betracht gezogen , von denen zwei Kafka- Nachrichtenbroker und der dritte der Manager sind.

Infolgedessen wird das folgende Komponentenschema implementiert:

Bild

Alle Komponenten auf einem Computer. Der Einfachheit halber verwenden wir die integrierten Nachrichten für Konsolenverleger (Hersteller) und Abonnenten (Verbraucher).

Das ZooKeeper-Modul ist in das Kafka-Paket integriert, wir verwenden es.

Installation und Einrichtung


Installieren des Kafka-Pakets

In diesem Fall ist das Betriebssystem Ubuntu 16.04 LTS.

Aktuelle Versionen und detaillierte Anweisungen finden Sie auf der offiziellen Website .

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 

Erstellen Sie Arbeitsverzeichnisse für die drei Knoten server_1, server_2 und 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/

Konfigurieren von Knoten

Konfigurieren eines Kafka-Brokers
(aus den Verzeichnissen kafka_server_1, kafka_server_2 bzw. kafka_server_3)

vim config/server.properties

  • Broker-ID (0, 1 bzw. 2)
  • Client-Port (9092, 9093, 9094)
  • ZooKeeper-Port (2181, 2182, 2183)
  • Protokollverzeichnis (/ 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

Znode-Konfiguration:

vim config/zookeeper.properties

  • Verzeichnis für Daten (/ tmp / zookeeper_1, / tmp / zookeeper_2, / tmp / zookeeper_3)
  • Client-Port (2181, 2182, 2183)
  • maximale Anzahl von Clientverbindungen und Verbindungslimits
  • Ports für den Datenaustausch zwischen Knoten (d. h. wir informieren jeden Knoten über die Existenz anderer)

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

Erstellen von Verzeichnissen für ZooKeeper-Knoten, Schreiben der Knoten-ID in Servicedateien:

mkdir -p /tmp/zookeeper_[1..3]
echo "1" >> /tmp/zookeeper_1/myid
echo "2" >> /tmp/zookeeper_2/myid
echo "3" >> /tmp/zookeeper_3/myid

Ändern Sie bei Problemen mit Zugriffsrechten diese in Verzeichnissen und Dateien:

sudo chmod 777 /tmp/zookeeper_1

Ausführen von Z-Knoten und Brokern


Führen Sie für die ersten beiden Knoten (kafka_server_1 /, kafka_server_2 /) die Skripte von ZooKeeper- und Kafka-Servern aus. Die Argumente sind die entsprechenden Konfigurationsdateien:

sudo bin/zookeeper-server-start.sh config/zookeeper.properties
sudo bin/kafka-server-start.sh config/server.properties

Für den dritten Knoten (kafka_server_3 /) - nur ZooKeeper.

Skripte zum Stoppen von Servern:

sudo bin/kafka-server-stop.sh
sudo bin/zookeeper-server-stop.sh

Erstellen eines Themas, Konsolenproduzent und Konsument


Thema (Thema) - Ein Nachrichtenstrom eines bestimmten Typs, der in Partitionen unterteilt ist (die Menge wird durch den Schlüssel --partition angegeben). Jede Partition wird auf zwei Servern dupliziert (--replication-factor). Geben Sie nach dem Schlüssel --bootstrap-server die durch Kommas getrennten Ports von Kafka-Brokern an. Der Schalter --topic gibt den Namen des Themas an.

sudo bin/kafka-topics.sh --create --bootstrap-server localhost:9092,localhost:9093 --replication-factor 2 --partitions 2 --topic TestTopic

Um die Liste der Themen auf dem Port herauszufinden, können Informationen zu jedem Thema mit dem folgenden Befehl erstellt werden:

sudo bin/kafka-topics.sh --list --zookeeper localhost:2181           
sudo bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic TestTopic

Leader - ein Server mit der Hauptinstanz der Partition, Replikat - der Server, auf dem Informationen dupliziert werden, ISR - Server, die bei einem Leader-Fehler die Rolle von Leaders übernehmen.

Wir erstellen den Konsolenproduzenten und Konsolenkonsumenten mithilfe der entsprechenden Skripte:

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

Dies stellt eine kontinuierliche Übertragung von Nachrichten an den Empfänger sicher, falls ein Nachrichtenbroker den zweiten verarbeitet.

Dienstleistungen für Tierpfleger und Kafka in systemctl


Zum bequemen Starten eines Clusters können Sie Dienste in systemctl erstellen: zookeeper_1.service, zookeeper_2.service, zookeeper_3.service, kafka_1.service, kafka_2.service.

Wir bearbeiten die Datei /etc/systemd/system/zookeeper_1.service (ändern Sie das Verzeichnis / home / user und user user in die erforderlichen).

[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

Für die Dienste zookeeper_2.service und zookeeper_3.service ist es ähnlich.

Datei /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 ist ähnlich.

Aktivierung und Überprüfung von Diensten

systemctl daemon-reload
systemctl enable zookeeper_1.service #  
systemctl start zookeeper_1.service
sudo journalctl -u zookeeper_1.service #   
systemctl stop zookeeper_1.service

Gleiches gilt für zookeeper_2.service, zookeeper_3.service, kafka_1.service, kafka_1.service.

Vielen Dank für Ihre Aufmerksamkeit!

All Articles