So sichern, importieren und migrieren Sie Ihre Apache Kafka-Daten unter Debian 9

Der Autor hat Tech Education Fund ausgewählt, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

Einführung

Das Sichern Ihrer Apache Kafka -Daten ist eine wichtige Methode, mit der Sie unbeabsichtigte Datenverluste oder fehlerhafte Daten, die dem Cluster aufgrund eines Benutzerfehlers hinzugefügt wurden, beheben können. Daten-Dumps von Cluster- und Themendaten sind eine effiziente Möglichkeit, Sicherungen und Wiederherstellungen durchzuführen.

Das Importieren und Migrieren Ihrer gesicherten Daten auf einen separaten Server ist hilfreich, wenn Ihre Kafka-Instanz aufgrund von Serverhardware- oder Netzwerkfehlern unbrauchbar wird und Sie eine neue Kafka-Instanz mit Ihren alten Daten erstellen müssen. Das Importieren und Migrieren von gesicherten Daten ist auch hilfreich, wenn Sie die Kafka-Instanz aufgrund einer geänderten Ressourcennutzung auf einen aktualisierten oder heruntergestuften Server verschieben.

In diesem Tutorial werden Sie Ihre Kafka-Daten auf einer einzelnen Debian 9-Installation sowie auf mehreren Debian 9-Installationen auf separaten Servern sichern, importieren und migrieren. ZooKeeper ist eine kritische Komponente des Betriebs von Kafka. Es speichert Informationen zum Clusterstatus, wie z. B. Kundendaten, Partitionsdaten und den Status anderer Broker im Cluster. Aus diesem Grund werden Sie in diesem Lernprogramm auch die Daten von ZooKeeper sichern.

Voraussetzungen

Um mitzukommen, benötigen Sie:

  • Ein Debian 9-Server mit mindestens 4 GB RAM und einem Benutzer, der kein Root-Sudo ist, wird unter https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-9 eingerichtet. .

  • Ein Debian 9-Server mit Apache Kafka, der als Quelle des Backups fungiert. Folgen Sie der How To Install Apache Kafka on Debian 9 Anleitung, um Ihre Kafka-Installation einzurichten, wenn Kafka ist noch nicht auf dem Quellserver installiert.

  • OpenJDK 8 auf dem Server installiert. Um diese Version zu installieren, folgen Sie diesen instruction an Installieren bestimmter Versionen von OpenJDK.

  • Optional für Schritt 7 - Ein weiterer Debian 9-Server mit installiertem Apache Kafka, der als Ziel der Sicherung fungiert. Folgen Sie dem Artikellink in der vorherigen Voraussetzung, um Kafka auf dem Zielserver zu installieren. Diese Voraussetzung ist nur erforderlich, wenn Sie Ihre Kafka-Daten von einem Server auf einen anderen verschieben. Wenn Sie Ihre Kafka-Daten auf einem einzelnen Server sichern und importieren möchten, können Sie diese Voraussetzung überspringen.

Schritt 1 - Erstellen eines Testthemas und Hinzufügen von Nachrichten

Eine Kafka-Nachricht ist die grundlegendste Einheit für die Datenspeicherung in Kafka. Sie ist die Entität, die Sie bei Kafka veröffentlichen und von Kafka abonnieren. Ein Kafka-Thema ist wie ein Container für eine Gruppe verwandter Nachrichten. Wenn Sie ein bestimmtes Thema abonnieren, erhalten Sie nur Nachrichten, die zu diesem bestimmten Thema veröffentlicht wurden. In diesem Abschnitt melden Sie sich bei dem Server an, den Sie sichern möchten (dem Quellserver), und fügen ein Kafka-Thema und eine Nachricht hinzu, damit Sie einige Daten für die Sicherung haben.

In diesem Tutorial wird davon ausgegangen, dass Sie Kafka im Home-Verzeichnis des Benutzers * kafka * (+ / home / kafka / kafka +) installiert haben. Wenn sich Ihre Installation in einem anderen Verzeichnis befindet, ändern Sie den Teil "+ ~ / +" in den folgenden Befehlen mit dem Pfad Ihrer Kafka-Installation und für die Befehle im weiteren Verlauf dieses Lernprogramms.

SSH in den Quellserver durch Ausführen von:

ssh @

Führen Sie den folgenden Befehl aus, um sich als * kafka * -Benutzer anzumelden:

sudo -iu kafka

Erstellen Sie ein Thema mit dem Namen "+" mit dem Shell-Dienstprogramm " kafka-topics.sh +" im bin-Verzeichnis Ihrer Kafka-Installation, indem Sie Folgendes eingeben:

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

Veröffentlichen Sie die Zeichenfolge "" Test Message 1 "" im Thema "+", indem Sie das Shell-Hilfsskript " ~ // bin / kafka-console-producer.sh +" verwenden.

Wenn Sie hier weitere Nachrichten hinzufügen möchten, können Sie dies jetzt tun.

echo "Test Message 1" | ~//bin/kafka-console-producer.sh --broker-list localhost:9092 --topic  > /dev/null

Mit der Datei + ~ // bin / kafka-console-producer.sh + können Sie Nachrichten direkt über die Befehlszeile veröffentlichen. Normalerweise veröffentlichen Sie Nachrichten mit einer Kafka-Clientbibliothek aus Ihrem Programm heraus. Da dies jedoch verschiedene Setups für verschiedene Programmiersprachen umfasst, können Sie das Shell-Skript als sprachunabhängige Methode zum Veröffentlichen von Nachrichten während des Testens oder der Ausführung von Verwaltungsaufgaben verwenden. Das Flag "+ - Thema +" gibt das Thema an, unter dem Sie die Nachricht veröffentlichen.

Stellen Sie als Nächstes sicher, dass das Skript "+ kafka-console-producer.sh +" die Nachricht (en) veröffentlicht hat, indem Sie den folgenden Befehl ausführen:

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

Das Shell-Skript + ~ // bin / kafka-console-consumer.sh + startet den Consumer. Nach dem Start werden Nachrichten aus dem Thema abonniert, das Sie in der Nachricht "" Test Message 1 "" im vorherigen Befehl veröffentlicht haben. Das Flag "+ - von Anfang an +" im Befehl ermöglicht das Konsumieren von Nachrichten, die veröffentlicht wurden, bevor der Consumer gestartet wurde. Wenn das Flag nicht aktiviert ist, werden nur Nachrichten angezeigt, die nach dem Start des Verbrauchers veröffentlicht wurden. Wenn Sie den Befehl ausführen, sehen Sie die folgende Ausgabe im Terminal:

OutputTest Message 1

Drücken Sie "+ STRG + C +", um den Consumer zu stoppen.

Sie haben einige Testdaten erstellt und überprüft, ob diese bestehen bleiben. Jetzt können Sie die Statusdaten im nächsten Abschnitt sichern.

Schritt 2 - Sichern der ZooKeeper-Statusdaten

Vor dem Sichern der tatsächlichen Kafka-Daten müssen Sie den in ZooKeeper gespeicherten Clusterstatus sichern.

ZooKeeper speichert seine Daten in dem Verzeichnis, das im Feld "+ dataDir " in der Konfigurationsdatei " ~ // config / zookeeper.properties " angegeben ist. Sie müssen den Wert dieses Felds lesen, um das zu sichernde Verzeichnis zu bestimmen. Standardmäßig zeigt ` dataDir ` auf das Verzeichnis ` / `. Wenn sich der Wert in Ihrer Installation unterscheidet, ersetzen Sie in den folgenden Befehlen " / +" durch diesen Wert.

Hier ist eine Beispielausgabe der Datei + ~ // config / zookeeper.properties:

~ / kafka / config / zookeeper.properties

...
...
...
# the directory where the snapshot is stored.
dataDir=/
# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0
...
...
...

Nachdem Sie den Pfad zum Verzeichnis angegeben haben, können Sie eine komprimierte Archivdatei mit ihrem Inhalt erstellen. Komprimierte Archivdateien sind eine bessere Option als reguläre Archivdateien, um Speicherplatz zu sparen. Führen Sie den folgenden Befehl aus:

tar -czf /home// //*

Die Ausgabe des Befehls + tar: Entfernen von führenden / von Mitgliedsnamen +, die Sie ignorieren können.

Die Flags "+ -c " und " -z " weisen " tar " an, ein Archiv zu erstellen und die gzip-Komprimierung auf das Archiv anzuwenden. Das ` -f ` Flag gibt den Namen der ausgegebenen komprimierten Archivdatei an, in diesem Fall `+`.

Sie können "+ ls " in Ihrem aktuellen Verzeichnis ausführen, um "+" als Teil Ihrer Ausgabe anzuzeigen.

Sie haben jetzt die ZooKeeper-Daten erfolgreich gesichert. Im nächsten Abschnitt sichern Sie die tatsächlichen Kafka-Daten.

Schritt 3 - Sichern der Kafka-Themen und -Nachrichten

In diesem Abschnitt sichern Sie das Datenverzeichnis von Kafka in einer komprimierten tar-Datei, wie Sie es im vorherigen Schritt für ZooKeeper getan haben.

Kafka speichert Themen, Nachrichten und interne Dateien in dem Verzeichnis, das das Feld "+ log.dirs " in der Konfigurationsdatei " ~ // config / server.properties " angibt. Sie müssen den Wert dieses Felds lesen, um das zu sichernde Verzeichnis zu bestimmen. Standardmäßig und in Ihrer aktuellen Installation zeigt " log.dirs +" auf das "" - Verzeichnis. Wenn sich der Wert in Ihrer Installation unterscheidet, ersetzen Sie "" in den folgenden Befehlen durch den richtigen Wert.

Hier ist eine Beispielausgabe der Datei + ~ // config / server.properties:

~ / kafka / config / server.properties

...
...
...
############################# Log Basics #############################

# A comma separated list of directories under which to store log files
log.dirs=

# The default number of log partitions per topic. More partitions allow greater
# parallelism for consumption, but this will also result in more files across
# the brokers.
num.partitions=1

# The number of threads per data directory to be used for log recovery at startup and flushing at shutdown.
# This value is recommended to be increased for installations with data dirs located in RAID array.
num.recovery.threads.per.data.dir=1
...
...
...

Beenden Sie zuerst den Kafka-Dienst, damit die Daten im Verzeichnis "+ log.dirs " in einem konsistenten Zustand sind, wenn Sie das Archiv mit " tar " erstellen. Kehren Sie dazu zum Nicht-Root-Benutzer Ihres Servers zurück, indem Sie " exit +" eingeben und dann den folgenden Befehl ausführen:

sudo systemctl stop kafka

Melden Sie sich nach dem Beenden des Kafka-Dienstes erneut als Ihr * kafka * -Benutzer an mit:

sudo -iu kafka

Es ist erforderlich, die Dienste Kafka und ZooKeeper als Benutzer ohne Rootberechtigung zu beenden / zu starten, da Sie in der Installationsvoraussetzung für Apache Kafka den Benutzer * kafka * aus Sicherheitsgründen eingeschränkt haben. Dieser Schritt in der Voraussetzung deaktiviert den sudo-Zugriff für den * kafka * -Benutzer, was dazu führt, dass Befehle nicht ausgeführt werden können.

Erstellen Sie nun eine komprimierte Archivdatei mit dem Inhalt des Verzeichnisses, indem Sie den folgenden Befehl ausführen:

tar -czf /home// *

Auch hier können Sie die Ausgabe des Befehls ignorieren (+ tar: Entfernen von führenden / von Mitgliedsnamen).

Sie können "+ ls " im aktuellen Verzeichnis ausführen, um "+" als Teil der Ausgabe anzuzeigen.

Sie können den Kafka-Dienst erneut starten - wenn Sie die Daten nicht sofort wiederherstellen möchten -, indem Sie "+ exit +" eingeben, zu Ihrem Benutzer ohne Rootberechtigung wechseln und dann Folgendes ausführen:

sudo systemctl start kafka

Melden Sie sich als Ihr * kafka * -Benutzer wieder an:

sudo -iu kafka

Sie haben die Kafka-Daten erfolgreich gesichert. Sie können jetzt mit dem nächsten Abschnitt fortfahren, in dem Sie die in ZooKeeper gespeicherten Clusterstatusdaten wiederherstellen.

Schritt 4 - Wiederherstellung der ZooKeeper-Daten

In diesem Abschnitt stellen Sie die Clusterstatusdaten wieder her, die Kafka intern erstellt und verwaltet, wenn der Benutzer Vorgänge ausführt, z. B. das Erstellen eines Themas, das Hinzufügen / Entfernen zusätzlicher Knoten sowie das Hinzufügen und Verarbeiten von Nachrichten. Sie können die Daten in Ihrer vorhandenen Quellinstallation wiederherstellen, indem Sie das ZooKeeper-Datenverzeichnis löschen und den Inhalt der ++ - Datei wiederherstellen. Wenn Sie Daten auf einem anderen Server wiederherstellen möchten, lesen Sie Schritt 7.

Sie müssen die Dienste Kafka und ZooKeeper stoppen, um zu verhindern, dass die Datenverzeichnisse während des Wiederherstellungsprozesses ungültige Daten empfangen.

Beenden Sie zuerst den Kafka-Dienst, indem Sie "+ exit +" eingeben, um zu Ihrem Benutzer ohne Rootberechtigung zu wechseln, und führen Sie dann Folgendes aus:

sudo systemctl stop kafka

Beenden Sie als Nächstes den ZooKeeper-Dienst:

sudo systemctl stop zookeeper

Melden Sie sich als Ihr * kafka * -Benutzer wieder an:

sudo -iu kafka

Anschließend können Sie das vorhandene Clusterdatenverzeichnis mit dem folgenden Befehl sicher löschen:

rm -r //*

Stellen Sie nun die Daten wieder her, die Sie in Schritt 2 gesichert haben:

tar -C / -xzf /home// --strip-components 2

Das Flag "+ -C " weist " tar " an, vor dem Extrahieren der Daten in das Verzeichnis " / " zu wechseln. Sie geben das Flag " - strip 2 " an, damit " tar" den Archivinhalt in "+ // " selbst und nicht in einem anderen Verzeichnis (z. B. " / tmp / zookeeper / tmp / zookeeper / +") extrahiert `) drin.

Sie haben die Clusterstatusdaten erfolgreich wiederhergestellt. Jetzt können Sie mit dem Wiederherstellungsprozess von Kafka-Daten im nächsten Abschnitt fortfahren.

Schritt 5 - Wiederherstellen der Kafka-Daten

In diesem Abschnitt stellen Sie die gesicherten Kafka-Daten in Ihrer vorhandenen Quellinstallation (oder auf dem Zielserver, wenn Sie den optionalen Schritt 7 ausgeführt haben) wieder her, indem Sie das Kafka-Datenverzeichnis löschen und die komprimierte Archivdatei wiederherstellen. Auf diese Weise können Sie überprüfen, ob die Wiederherstellung erfolgreich funktioniert.

Sie können das vorhandene Kafka-Datenverzeichnis mit dem folgenden Befehl sicher löschen:

rm -r *

Nachdem Sie die Daten gelöscht haben, ähnelt Ihre Kafka-Installation einer Neuinstallation, in der keine Themen oder Meldungen vorhanden sind. Um Ihre gesicherten Daten wiederherzustellen, extrahieren Sie die Dateien, indem Sie Folgendes ausführen:

tar -C  -xzf /home// --strip-components 2

Das "+ -C " - Flag weist " tar " an, vor dem Extrahieren der Daten in das Verzeichnis "" zu wechseln. Sie geben das Flag "+ - strip 2 +" an, um sicherzustellen, dass der Inhalt des Archivs in "" selbst und nicht in einem anderen Verzeichnis extrahiert wird (z. B. " / tmp / kafka-logs / kafka-logs / +"). drinnen.

Nachdem Sie die Daten erfolgreich extrahiert haben, können Sie die Dienste Kafka und ZooKeeper erneut starten, indem Sie "+ exit +" eingeben, zu Ihrem Benutzer ohne Rootberechtigung wechseln und dann Folgendes ausführen:

sudo systemctl start kafka

Starten Sie den ZooKeeper-Dienst mit:

sudo systemctl start zookeeper

Melden Sie sich als Ihr * kafka * -Benutzer wieder an:

sudo -iu kafka

Wenn Sie die + kafka + - Daten wiederhergestellt haben, können Sie im nächsten Abschnitt überprüfen, ob die Wiederherstellung erfolgreich war.

Schritt 6 - Überprüfen der Wiederherstellung

Um die Wiederherstellung der Kafka-Daten zu testen, verwenden Sie Nachrichten aus dem in Schritt 1 erstellten Thema.

Warten Sie ein paar Minuten, bis Kafka startet, und führen Sie dann den folgenden Befehl aus, um Nachrichten aus dem ++ zu lesen:

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

Wenn Sie eine Warnung wie die folgende erhalten, müssen Sie warten, bis Kafka vollständig gestartet ist:

Output[2018-09-13 15:52:45,234] WARN [Consumer clientId=consumer-1, groupId=console-consumer-87747] Connection to node -1 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

Wiederholen Sie den vorherigen Befehl in ein paar Minuten oder führen Sie "+ sudo systemctl restart kafka +" als Benutzer ohne Rootberechtigung aus. Wenn bei der Wiederherstellung keine Probleme auftreten, wird die folgende Ausgabe angezeigt:

OutputTest Message 1

Wenn diese Meldung nicht angezeigt wird, können Sie überprüfen, ob Sie im vorherigen Abschnitt Befehle verpasst haben, und diese ausführen.

Nachdem Sie die wiederhergestellten Kafka-Daten überprüft haben, bedeutet dies, dass Sie Ihre Daten in einer einzigen Kafka-Installation erfolgreich gesichert und wiederhergestellt haben. Sie können mit Schritt 7 fortfahren, um zu erfahren, wie Sie die Cluster- und Themendaten auf eine Installation auf einem anderen Server migrieren.

Schritt 7 - Migration und Wiederherstellung der Sicherung auf einen anderen Kafka-Server (optional)

In diesem Abschnitt migrieren Sie die gesicherten Daten vom Quell-Kafka-Server auf den Ziel-Kafka-Server. Verwenden Sie dazu zuerst den Befehl + scp +, um die komprimierten + tar.gz + - Dateien auf Ihr lokales System herunterzuladen. Anschließend verwenden Sie erneut "+ scp +", um die Dateien auf den Zielserver zu übertragen. Sobald die Dateien auf dem Zielserver vorhanden sind, können Sie die zuvor zum Wiederherstellen der Sicherung ausgeführten Schritte ausführen und überprüfen, ob die Migration erfolgreich war.

Sie laden die Sicherungsdateien lokal herunter und laden sie dann auf den Zielserver hoch, anstatt sie direkt von Ihrem Quellserver auf den Zielserver zu kopieren, da der Zielserver den SSH-Schlüssel Ihres Quellservers nicht in seinem `+ / home //. Ssh enthält / authorized_keys + `Datei und kann keine Verbindung zum und vom Quellserver herstellen. Ihr lokaler Computer kann jedoch eine Verbindung zu beiden Servern herstellen, wodurch Sie einen zusätzlichen Schritt zum Einrichten des SSH-Zugriffs vom Quell- zum Zielserver sparen.

Laden Sie die Dateien "" und "" auf Ihren lokalen Computer herunter, indem Sie Folgendes ausführen:

scp @:/home// .

Sie sehen eine Ausgabe ähnlich der folgenden:

Output                                                                                                  100%   68KB 128.0KB/s   00:00

Führen Sie nun den folgenden Befehl aus, um die ++ - Datei auf Ihren lokalen Rechner herunterzuladen:

scp @:/home// .

Sie werden die folgende Ausgabe sehen:

Output                                                                                                       100% 1031KB 488.3KB/s   00:02

Führen Sie "+ ls +" im aktuellen Verzeichnis Ihres lokalen Rechners aus. Sie sehen beide Dateien:

Output

Führen Sie den folgenden Befehl aus, um die ++ - Datei auf + / home // + des Zielservers zu übertragen:

scp  @:/home//

Führen Sie nun den folgenden Befehl aus, um die Datei + kafka-backup.tar.gz + auf + / home // + des Zielservers zu übertragen:

scp  @:/home//

Sie haben die Sicherungsdateien erfolgreich auf den Zielserver hochgeladen. Da sich die Dateien im Verzeichnis "+ / home // " befinden und nicht über die richtigen Zugriffsberechtigungen für den Benutzer "* kafka *" verfügen, können Sie die Dateien in das Verzeichnis " / home // +" verschieben und dort ändern Berechtigungen.

SSH in den Zielserver durch Ausführen von:

ssh @

Verschieben Sie nun ++ nach + / home // +, indem Sie Folgendes ausführen:

sudo mv  /home//

Führen Sie auf ähnliche Weise den folgenden Befehl aus, um "+" nach " / home // +" zu kopieren:

sudo mv  /home//

Ändern Sie den Eigentümer der Sicherungsdateien, indem Sie den folgenden Befehl ausführen:

sudo chown kafka /home// /home//

Die vorherigen Befehle + mv + und + chown + zeigen keine Ausgabe an.

Befolgen Sie die Anweisungen in den Schritten 4 bis 6 dieses Lernprogramms, um die Daten für Ihren Zielserver wiederherzustellen und zu überprüfen, da sich die Sicherungsdateien nun im richtigen Verzeichnis auf dem Zielserver befinden.

Fazit

In diesem Lernprogramm haben Sie Ihre Kafka-Themen und -Nachrichten von derselben Installation sowie von Installationen auf separaten Servern gesichert, importiert und migriert. Wenn Sie mehr über andere nützliche Verwaltungsaufgaben in Kafka erfahren möchten, lesen Sie den Abschnitt operations in der offiziellen Dokumentation von Kafka.

Um gesicherte Dateien wie + zookeeper-backup.tar.gz + und + kafka-backup.tar.gz + remote zu speichern, können Sie DigitalOcean Spaces durchsuchen . Wenn Kafka der einzige Dienst ist, der auf Ihrem Server ausgeführt wird, können Sie auch andere Sicherungsmethoden ausprobieren, z. B. die vollständige Instanz backups.