So installieren Sie Apache Kafka unter Debian 9

Der Autor hat den Free and Open Source Fund ausgewählt, um eine Spende als Teil des Write for DOnations zu erhalten. Programm.

Einführung

Apache Kafka ist ein beliebter verteilter Nachrichtenbroker, der für die effiziente Verarbeitung großer Mengen von Echtzeitdaten entwickelt wurde. Ein Kafka-Cluster ist nicht nur hoch skalierbar und fehlertolerant, sondern hat auch einen viel höheren Durchsatz im Vergleich zu anderen Nachrichtenbrokern wie ActiveMQ und https://www.rabbitmq. com / [RabbitMQ]. Obwohl es im Allgemeinen als publish / subscribe-Messagingsystem verwendet wird, wird es von vielen Organisationen auch für die Protokollaggregation verwendet, da es dauerhaften Speicher für veröffentlichte Nachrichten bietet.

Ein Publish / Subscribe-Messaging-System ermöglicht es einem oder mehreren Produzenten, Nachrichten zu veröffentlichen, ohne die Anzahl der Konsumenten oder die Art und Weise zu berücksichtigen, wie sie die Nachrichten verarbeiten. Abonnierte Clients werden automatisch über Updates und das Erstellen neuer Nachrichten informiert. Dieses System ist effizienter und skalierbarer als Systeme, bei denen Clients regelmäßig abfragen, um festzustellen, ob neue Nachrichten verfügbar sind.

In diesem Tutorial installieren und verwenden Sie Apache Kafka 2.1.1 unter Debian 9.

Voraussetzungen

Um mitzukommen, benötigen Sie:

  • Ein Debian 9-Server und ein Nicht-Root-Benutzer mit Sudo-Rechten. Befolgen Sie die in dieser guide angegebenen Schritte, wenn Sie keinen Nicht-Root-Benutzer eingerichtet haben.

  • Mindestens 4 GB RAM auf dem Server. Installationen ohne diese RAM-Größe können dazu führen, dass der Kafka-Dienst fehlschlägt, wobei die Java Virtual Machine (JVM) beim Start eine Ausnahmebedingung „Out of Memory“ auslöst.

  • OpenJDK 8 auf Ihrem Server installiert. Folgen Sie zum Installieren dieser Version https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-debian-9#installing-the-default-jrejdk matures] Installieren bestimmter Versionen von OpenJDK. Kafka ist in Java geschrieben, daher ist eine JVM erforderlich. Das Start-Shell-Skript weist jedoch einen Versionserkennungsfehler auf, der dazu führt, dass das Starten mit JVM-Versionen über 8 fehlschlägt.

Schritt 1 - Erstellen eines Benutzers für Kafka

Da Kafka Anforderungen über ein Netzwerk verarbeiten kann, sollten Sie einen dedizierten Benutzer dafür erstellen. Dies minimiert den Schaden an Ihrer Debian-Maschine, falls der Kafka-Server kompromittiert werden sollte. In diesem Schritt erstellen wir einen dedizierten * kafka * -Benutzer. Sie sollten jedoch einen anderen Benutzer ohne Rootberechtigung erstellen, um andere Aufgaben auf diesem Server auszuführen, nachdem Sie Kafka eingerichtet haben.

Wenn Sie als Benutzer angemeldet sind, der kein Root-Benutzer ist, erstellen Sie einen Benutzer mit dem Namen * kafka * mit dem Befehl + useradd +:

sudo useradd kafka -m

Das + -m + Flag stellt sicher, dass ein Home-Verzeichnis für den Benutzer erstellt wird. Dieses Ausgangsverzeichnis, "+ / home / kafka +", fungiert als unser Arbeitsbereichsverzeichnis für die Ausführung von Befehlen in den folgenden Abschnitten.

Setzen Sie das Passwort mit + passwd +:

sudo passwd kafka

Fügen Sie den Benutzer * kafka * mit dem Befehl + adduser + zur Gruppe + sudo + hinzu, damit er über die erforderlichen Berechtigungen zum Installieren der Abhängigkeiten von Kafka verfügt:

sudo adduser kafka sudo

Ihr * kafka * Benutzer ist jetzt bereit. Loggen Sie sich mit + su + in dieses Konto ein:

su -l kafka

Nachdem wir den Kafka-spezifischen Benutzer erstellt haben, können wir die Kafka-Binärdateien herunterladen und extrahieren.

Schritt 2 - Herunterladen und Extrahieren der Kafka-Binärdateien

Laden Sie die Kafka-Binärdateien herunter und extrahieren Sie sie in dedizierte Ordner im Home-Verzeichnis unseres * kafka * -Benutzers.

Erstellen Sie zunächst in + / home / kafka + ein Verzeichnis mit dem Namen + Downloads +, um Ihre Downloads zu speichern:

mkdir ~/Downloads

Installieren Sie "+ curl " mit " apt-get +", damit Sie entfernte Dateien herunterladen können:

sudo apt-get update && sudo apt-get install -y curl

Sobald + curl + installiert ist, können Sie die Kafka-Binärdateien herunterladen:

curl "https://www.apache.org/dist/kafka//kafka_.tgz" -o ~/Downloads/kafka.tgz

Erstellen Sie ein Verzeichnis mit dem Namen "+ kafka +" und wechseln Sie in dieses Verzeichnis. Dies ist das Basisverzeichnis der Kafka-Installation:

mkdir ~/kafka && cd ~/kafka

Extrahieren Sie das heruntergeladene Archiv mit dem Befehl + tar +:

tar -xvzf ~/Downloads/kafka.tgz --strip 1

Wir geben das "+ - strip 1 " -Flag an, um sicherzustellen, dass der Inhalt des Archivs in " ~ / kafka / " selbst und nicht in einem anderen Verzeichnis (wie " ~ / kafka / kafka _ / +") extrahiert wird davon.

Nachdem wir die Binärdateien erfolgreich heruntergeladen und extrahiert haben, können wir Kafka so konfigurieren, dass Themen gelöscht werden können.

Schritt 3 - Konfigurieren des Kafka-Servers

Mit dem Standardverhalten von Kafka können wir kein Topic, keine Kategorie, keine Gruppe oder keinen Feed-Namen löschen, unter denen Nachrichten veröffentlicht werden können. Um dies zu ändern, bearbeiten wir die Konfigurationsdatei.

Die Konfigurationsoptionen von Kafka werden in + server.properties angegeben. Öffne diese Datei mit + nano + oder deinem Lieblingseditor:

nano ~/kafka/config/server.properties

Fügen wir eine Einstellung hinzu, mit der wir Kafka-Themen löschen können. Fügen Sie am Ende der Datei Folgendes hinzu:

~ / kafka / config / server.properties

delete.topic.enable = true

Speichern Sie die Datei und beenden Sie + nano +. Nachdem wir Kafka konfiguriert haben, können wir System-Unit-Dateien erstellen, die ausgeführt und beim Start aktiviert werden.

Schritt 4 - Erstellen von Systemd Unit-Dateien und Starten des Kafka-Servers

In diesem Abschnitt erstellen wir systemd unit files für den Kafka-Dienst. Auf diese Weise können wir allgemeine Dienstaktionen wie Starten, Stoppen und Neustarten von Kafka auf eine Weise ausführen, die mit anderen Linux-Diensten konsistent ist.

ZooKeeper ist ein Dienst, mit dem Kafka seinen Clusterstatus und seine Konfigurationen verwaltet. Es wird häufig in vielen verteilten Systemen als integraler Bestandteil verwendet. Wenn Sie mehr darüber erfahren möchten, besuchen Sie die offiziellen ZooKeeper docs.

Erstellen Sie die Unit-Datei für + zookeeper +:

sudo nano /etc/systemd/system/zookeeper.service

Geben Sie die folgende Einheitendefinition in die Datei ein:

/etc/systemd/system/zookeeper.service

[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
User=kafka
ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

Der Abschnitt + [Unit] + gibt an, dass ZooKeeper ein Netzwerk benötigt und das Dateisystem bereit ist, bevor es gestartet werden kann.

Der Abschnitt + [Service] + gibt an, dass systemd die Shell-Dateien + zookeeper-server-start.sh + und + zookeeper-server-stop.sh + zum Starten und Stoppen des Service verwenden soll. Es gibt auch an, dass ZooKeeper automatisch neu gestartet werden soll, wenn es nicht normal beendet wird.

Als nächstes erstellen Sie die systemd-Service-Datei für + kafka +:

sudo nano /etc/systemd/system/kafka.service

Geben Sie die folgende Einheitendefinition in die Datei ein:

/etc/systemd/system/kafka.service

[Unit]
Requires=zookeeper.service
After=zookeeper.service

[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

Der Abschnitt "+ [Unit] " gibt an, dass diese Unit-Datei von " zookeeper.service " abhängt. Dadurch wird sichergestellt, dass " zookeeper " automatisch gestartet wird, wenn der " kafka +" - Dienst gestartet wird.

Der Abschnitt "+ [Service] " gibt an, dass systemd die Shell-Dateien " kafka-server-start.sh " und " kafka-server-stop.sh +" zum Starten und Stoppen des Service verwenden soll. Es gibt auch an, dass Kafka automatisch neu gestartet werden soll, wenn es nicht normal beendet wird.

Nachdem Sie die Einheiten definiert haben, starten Sie Kafka mit dem folgenden Befehl:

sudo systemctl start kafka

Um sicherzustellen, dass der Server erfolgreich gestartet wurde, überprüfen Sie die Journalprotokolle für die Einheit + kafka +:

sudo journalctl -u kafka

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

OutputMar 23 13:31:48 kafka systemd[1]: Started kafka.service.

Sie haben jetzt einen Kafka-Server, der den Port "+ 9092 +" überwacht.

Während wir den Dienst "+ kafka " gestartet haben, würde unser Server beim Neustart nicht automatisch gestartet. Um ` kafka +` beim Serverstart zu aktivieren, führen Sie Folgendes aus:

sudo systemctl enable kafka

Nachdem wir die Dienste gestartet und aktiviert haben, überprüfen wir die Installation.

Schritt 5 - Testen der Installation

Veröffentlichen und konsumieren wir eine * "Hello World" * -Nachricht, um sicherzustellen, dass sich der Kafka-Server korrekt verhält. Das Veröffentlichen von Nachrichten in Kafka erfordert:

  • Ein producer, der die Veröffentlichung von Datensätzen und Daten zu Themen ermöglicht.

  • Ein consumer, der Nachrichten und Daten von Themen liest.

Erstellen Sie zunächst ein Thema mit dem Namen "+ TutorialTopic +", indem Sie Folgendes eingeben:

~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic

Sie können einen Produzenten über die Befehlszeile mit dem Skript + kafka-console-producer.sh + erstellen. Es werden der Hostname, der Port und ein Themenname des Kafka-Servers als Argumente erwartet.

Veröffentlichen Sie den String "" Hello, World "" im Thema "+ TutorialTopic +", indem Sie Folgendes eingeben:

echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

Als nächstes können Sie einen Kafka-Consumer mit dem Skript + kafka-console-consumer.sh + erstellen. Es erwartet den Hostnamen und den Port des ZooKeeper-Servers sowie einen Themennamen als Argumente.

Der folgende Befehl verwendet Nachrichten von "+ TutorialTopic ". Beachten Sie die Verwendung des Flags " - von Anfang an +", das den Verbrauch von Nachrichten ermöglicht, die veröffentlicht wurden, bevor der Consumer gestartet wurde:

~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning

Wenn keine Konfigurationsprobleme vorliegen, sollte auf Ihrem Terminal "+ Hello, World" angezeigt werden:

OutputHello, World

Das Skript wird weiterhin ausgeführt und wartet darauf, dass weitere Nachrichten im Thema veröffentlicht werden. Öffnen Sie einfach ein neues Terminal und starten Sie einen Produzenten, um weitere Nachrichten zu veröffentlichen. Sie sollten sie alle in der Ausgabe des Verbrauchers sehen können.

Wenn Sie mit dem Testen fertig sind, drücken Sie "+ STRG + C +", um das Consumer-Skript zu stoppen. Nachdem wir die Installation getestet haben, fahren wir mit der Installation von KafkaT fort.

Schritt 6 - KafkaT installieren (optional)

KafkaT ist ein Tool von Airbnb, mit dem Sie Details zu Ihrem Kafka-Cluster einfacher anzeigen und bestimmte Verwaltungsaufgaben über die Befehlszeile ausführen können. Da es sich um ein Ruby-Juwel handelt, benötigen Sie Ruby, um es zu verwenden. Sie benötigen außerdem das Paket "+ build-essential ", um die anderen Juwelen, von denen es abhängt, erstellen zu können. Installiere sie mit ` apt +`:

sudo apt install ruby ruby-dev build-essential

Sie können KafkaT jetzt mit dem Befehl gem installieren:

sudo gem install kafkat

KafkaT verwendet "+ .kafkatcfg +" als Konfigurationsdatei, um die Installations- und Protokollverzeichnisse Ihres Kafka-Servers zu bestimmen. Es sollte auch einen Eintrag enthalten, der KafkaT auf Ihre ZooKeeper-Instanz verweist.

Erstellen Sie eine neue Datei mit dem Namen "+ .kafkatcfg +":

nano ~/.kafkatcfg

Fügen Sie die folgenden Zeilen hinzu, um die erforderlichen Informationen zu Ihrem Kafka-Server und Ihrer Zookeeper-Instanz anzugeben:

~ / .kafkatcfg

{
 "kafka_path": "~/kafka",
 "log_path": "/tmp/kafka-logs",
 "zk_path": "localhost:2181"
}

Sie können KafkaT jetzt verwenden. So können Sie zunächst Details zu allen Kafka-Partitionen anzeigen:

kafkat partitions

Sie werden die folgende Ausgabe sehen:

OutputTopic                 Partition   Leader      Replicas        ISRs
TutorialTopic         0             0         [0]             [0]
__consumer_offsets    0               0           [0]                           [0]
...
...

Sie sehen "+ TutorialTopic " sowie " consumer_offsets ", ein internes Thema, das von Kafka zum Speichern von Client-bezogenen Informationen verwendet wird. Sie können Zeilen, die mit ` consumer_offsets` beginnen, ignorieren.

Weitere Informationen zu KafkaT finden Sie unter GitHub repository.

Schritt 7 - Einrichten eines Clusters mit mehreren Knoten (optional)

Wenn Sie einen Multi-Broker-Cluster mit mehr Debian 9-Maschinen erstellen möchten, sollten Sie Schritt 1, Schritt 4 und Schritt 5 auf jeder neuen Maschine wiederholen. Darüber hinaus sollten Sie die folgenden Änderungen in der Datei "+ server.properties" vornehmen:

  • Der Wert der Eigenschaft "+ broker.id " sollte so geändert werden, dass er im gesamten Cluster eindeutig ist. Diese Eigenschaft identifiziert jeden Server im Cluster eindeutig und kann eine beliebige Zeichenfolge als Wert haben. Beispiel: "" Server1 "", "" Server2 "+" usw.

  • Der Wert der Eigenschaft "+ zookeeper.connect " sollte so geändert werden, dass alle Knoten auf dieselbe ZooKeeper-Instanz verweisen. Diese Eigenschaft gibt die Adresse der ZooKeeper-Instanz an und folgt dem Format " <HOSTNAME / IP_ADDRESS>: <PORT> ". Zum Beispiel "": 2181 "", "": 2181 "+" usw.

Wenn Sie mehrere ZooKeeper-Instanzen für Ihren Cluster haben möchten, sollte der Wert der Eigenschaft "+ zookeeper.connect +" auf jedem Knoten eine identische, durch Kommas getrennte Zeichenfolge sein, in der die IP-Adressen und Portnummern aller ZooKeeper-Instanzen aufgelistet sind.

Schritt 8 - Einschränkung des Kafka-Benutzers

Nachdem alle Installationen abgeschlossen sind, können Sie die Administratorrechte des * kafka * -Benutzers entfernen. Melden Sie sich vorher ab und wieder als jeder andere Benutzer ohne Rootberechtigung an. Wenn Sie immer noch dieselbe Shell-Sitzung ausführen, mit der Sie dieses Tutorial gestartet haben, geben Sie einfach "+ exit +" ein.

Entfernen Sie den Benutzer * kafka * aus der sudo-Gruppe:

sudo deluser kafka sudo

Um die Sicherheit Ihres Kafka-Servers weiter zu verbessern, sperren Sie das Passwort des * kafka * -Benutzers mit dem Befehl + passwd +. Dies stellt sicher, dass sich niemand mit diesem Konto direkt beim Server anmelden kann:

sudo passwd kafka -l

Zu diesem Zeitpunkt können sich nur Root- oder Sudo-Benutzer als "+ kafka +" anmelden, indem Sie den folgenden Befehl eingeben:

sudo su - kafka

Wenn Sie es in Zukunft entsperren möchten, verwenden Sie "+ passwd " mit der Option " -u +":

sudo passwd kafka -u

Sie haben nun die Administratorrechte des * kafka * -Benutzers erfolgreich eingeschränkt.

Fazit

Sie haben jetzt Apache Kafka, das sicher auf Ihrem Debian-Server läuft. Sie können es in Ihren Projekten verwenden, indem Sie Kafka-Produzenten und -Konsumenten mit Kafka clients erstellen, die für die meisten Programmiersprachen verfügbar sind. Weitere Informationen zu Kafka finden Sie auch unter documentation.