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:
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-PaketsIn 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 KnotenKonfigurieren 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 Dienstensystemctl 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!