Apache Kafka ist eine verteilte Streaming-Plattform. Mit seinem reichhaltigen API-Set (Application Programming Interface) können wir fast alles mit Kafka als Datenquelle verbinden, und auf der anderen Seite können wir eine große Anzahl von Verbrauchern einrichten, die den Strom von Datensätzen zur Verarbeitung erhalten. Kafka ist hochgradig skalierbar und speichert die Datenströme zuverlässig und fehlertolerant. Aus Sicht der Konnektivität kann Kafka als Brücke zwischen vielen heterogenen Systemen dienen, die sich wiederum auf ihre Fähigkeiten verlassen können, die bereitgestellten Daten zu übertragen und zu speichern.
In diesem Tutorial installieren wir Apache Kafka auf einem Red Hat Enterprise Linux 8, erstellen die systemd
Unit-Dateien für eine einfachere Verwaltung und testen Sie die Funktionalität mit den mitgelieferten Befehlszeilen-Tools.
In diesem Tutorial lernen Sie:
- So installieren Sie Apache Kafka
- So erstellen Sie systemd-Dienste für Kafka und Zookeeper
- So testen Sie Kafka mit Befehlszeilen-Clients
Konsumieren von Nachrichten zum Thema Kafka über die Befehlszeile.
Softwareanforderungen und verwendete Konventionen
Kategorie | Anforderungen, Konventionen oder verwendete Softwareversion |
---|---|
System | Red Hat Enterprise Linux 8 |
Software | Apache Kafka 2.11 |
Andere | Privilegierter Zugriff auf Ihr Linux-System als root oder über sudo Befehl. |
Konventionen | # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von sudo Befehl$ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden |
Schritt-für-Schritt-Anleitung zur Installation von Kafka auf Redhat 8
Apache Kafka ist in Java geschrieben, also brauchen wir nur OpenJDK 8 installiert, um mit der Installation fortzufahren. Kafka setzt auf Apache Zookeeper, einen verteilten Koordinierungsdienst, der ebenfalls in Java geschrieben ist und mit dem von uns heruntergeladenen Paket ausgeliefert wird. Während die Installation von HA-Diensten (High Availability) auf einem einzelnen Knoten ihren Zweck zunichte macht, werden wir Zookeeper für Kafka installieren und ausführen.
- Um Kafka vom nächstgelegenen Mirror herunterzuladen, müssen wir die offizielle Download-Site konsultieren. Wir können die URL von
.tar.gz
kopieren Datei von dort. Wir verwendenwget
, und die eingefügte URL, um das Paket auf den Zielcomputer herunterzuladen:# wget https://www-eu.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz -O /opt/kafka_2.11-2.1.0.tgz
- Wir geben den
/opt
ein Verzeichnis und extrahieren Sie das Archiv:# cd /opt # tar -xvf kafka_2.11-2.1.0.tgz
Und erstellen Sie einen Symlink namens
/opt/kafka
das zeigt auf den jetzt erstellten/opt/kafka_2_11-2.1.0
Verzeichnis, um unser Leben einfacher zu machen.ln -s /opt/kafka_2.11-2.1.0 /opt/kafka
- Wir erstellen einen nicht privilegierten Benutzer, der beide
zookeeper
ausführt undkafka
service.# useradd kafka
- Und legen Sie den neuen Benutzer rekursiv als Besitzer des gesamten Verzeichnisses fest, das wir extrahiert haben:
# chown -R kafka:kafka /opt/kafka*
- Wir erstellen die Unit-Datei
/etc/systemd/system/zookeeper.service
mit folgendem Inhalt:[Unit] Description=zookeeper After=syslog.target network.target [Service] Type=simple User=kafka Group=kafka ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh [Install] WantedBy=multi-user.target
Beachten Sie, dass wir die Versionsnummer aufgrund des von uns erstellten Symlinks nicht dreimal schreiben müssen. Gleiches gilt für die nächste Unit-Datei für Kafka,
/etc/systemd/system/kafka.service
, das die folgenden Konfigurationszeilen enthält:[Unit] Description=Apache Kafka Requires=zookeeper.service After=zookeeper.service [Service] Type=simple User=kafka Group=kafka ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties ExecStop=/opt/kafka/bin/kafka-server-stop.sh [Install] WantedBy=multi-user.target
- Wir müssen
systemd
neu laden Lesen Sie dazu die neuen Unit-Dateien:# systemctl daemon-reload
- Jetzt können wir unsere neuen Dienste starten (in dieser Reihenfolge):
# systemctl start zookeeper # systemctl start kafka
Wenn alles gut geht,
systemd
sollte den laufenden Zustand über den Status beider Dienste melden, ähnlich den folgenden Ausgaben:# systemctl status zookeeper.service zookeeper.service - zookeeper Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2019-01-10 20:44:37 CET; 6s ago Main PID: 11628 (java) Tasks: 23 (limit: 12544) Memory: 57.0M CGroup: /system.slice/zookeeper.service 11628 java -Xmx512M -Xms512M -server [...] # systemctl status kafka.service kafka.service - Apache Kafka Loaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2019-01-10 20:45:11 CET; 11s ago Main PID: 11949 (java) Tasks: 64 (limit: 12544) Memory: 322.2M CGroup: /system.slice/kafka.service 11949 java -Xmx1G -Xms1G -server [...]
- Optional können wir den automatischen Start beim Booten für beide Dienste aktivieren:
# systemctl enable zookeeper.service # systemctl enable kafka.service
- Um die Funktionalität zu testen, verbinden wir uns mit einem Producer- und einem Consumer-Client mit Kafka. Die vom Produzenten bereitgestellten Nachrichten sollten auf der Konsole des Konsumenten erscheinen. Aber vorher brauchen wir ein Medium, auf dem diese beiden Nachrichten austauschen. Wir erstellen einen neuen Datenkanal namens
topic
in Kafkas Begriffen, wo der Anbieter veröffentlicht und wo der Verbraucher abonniert. Wir nennen das ThemaFirstKafkaTopic
. Wir verwenden denkafka
Benutzer zum Erstellen des Themas:$ /opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic FirstKafkaTopic
- Wir starten einen Consumer-Client über die Befehlszeile, der das (zu diesem Zeitpunkt leere) Thema abonniert, das im vorherigen Schritt erstellt wurde:
$ /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic FirstKafkaTopic --from-beginning
Wir lassen die Konsole und den darin laufenden Client offen. In dieser Konsole erhalten wir die Nachricht, die wir mit dem Producer-Client veröffentlichen.
- Auf einem anderen Terminal starten wir einen Producer-Client und veröffentlichen einige Nachrichten zu dem von uns erstellten Thema. Wir können Kafka nach verfügbaren Themen abfragen:
$ /opt/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181 FirstKafkaTopic
Und stellen Sie eine Verbindung zu dem her, das der Verbraucher abonniert hat, und senden Sie dann eine Nachricht:
$ /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic FirstKafkaTopic > new message published by producer from console #2
Am Verbraucherterminal sollte in Kürze die Meldung erscheinen:
$ /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic FirstKafkaTopic --from-beginning new message published by producer from console #2
Wenn die Meldung erscheint, ist unser Test erfolgreich und unsere Kafka-Installation funktioniert wie vorgesehen. Viele Clients könnten einen oder mehrere Themendatensätze auf die gleiche Weise bereitstellen und nutzen, sogar mit einer Einrichtung mit einem einzelnen Knoten, die wir in diesem Tutorial erstellt haben.