So sichern, importieren und migrieren Sie Ihre Apache Kafka-Daten unter CentOS 7

Der Autor hat dieTech Education Fundausgewählt, um eine Spende im Rahmen desWrite for DOnations-Programms zu erhalten.

Einführung

Das Sichern derApache Kafka-Daten ist eine wichtige Methode, mit der Sie sich von unbeabsichtigtem Datenverlust oder fehlerhaften Daten, die dem Cluster aufgrund von Benutzerfehlern hinzugefügt wurden, erholen 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 Lernprogramm sichern, importieren und migrieren Sie Ihre Kafka-Daten auf einer einzelnen CentOS 7-Installation sowie auf mehreren CentOS 7-Installationen auf separaten Servern. 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 CentOS 7-Server mit mindestens 4 GB RAM und einem Nicht-Root-Sudo-Benutzer, der durch Befolgen vonthis tutorial eingerichtet wurde.

  • Ein CentOS 7-Server, auf dem Apache Kafka installiert ist und der als Quelle für die Sicherung dient. Befolgen Sie die Anleitung vonHow To Install Apache Kafka on CentOS 7, um Ihre Kafka-Installation einzurichten, falls Kafka noch nicht auf dem Quellserver installiert ist.

  • OpenJDK 8 auf dem Server installiert. Befolgen Sie zum Installieren dieser Version dieseinstructions, um bestimmte Versionen von OpenJDK zu installieren.

  • Optional für Schritt 7 - Ein weiterer CentOS 7-Server mit installiertem Apache Kafka als Ziel der Sicherung. 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]] == Schritt 1 - Erstellen eines Testthemas und Hinzufügen von Nachrichten

Ein Kafkamessage ist die grundlegendste Einheit der Datenspeicherung in Kafka und die Entität, die Sie in Kafka veröffentlichen und abonnieren. Ein Kafkatopic 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 Benutzerskafka(/home/kafka/kafka) installiert haben. Wenn sich Ihre Installation in einem anderen Verzeichnis befindet, ändern Sie den~/kafka-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 sammy@source_server_ip

Führen Sie den folgenden Befehl aus, um sich als Benutzer vonkafkaanzumelden:

sudo -iu kafka

Erstellen Sie ein Thema mit dem NamenBackupTopic mithilfe der Shell-Dienstprogrammdateikafka-topics.sh im bin-Verzeichnis Ihrer Kafka-Installation, indem Sie Folgendes eingeben:

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

Veröffentlichen Sie die Zeichenfolge"Test Message 1" mithilfe des Shell-Dienstprogramms von~/kafka/bin/kafka-console-producer.shim ThemaBackupTopic.

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

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

Mit der Datei~/kafka/bin/kafka-console-producer.shkö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--topic gibt das Thema an, in dem Sie die Nachricht veröffentlichen möchten.

Stellen Sie als Nächstes sicher, dass das Skriptkafka-console-producer.shdie Nachricht (en) veröffentlicht hat, indem Sie den folgenden Befehl ausführen:

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

Das Shell-Skript~/kafka/bin/kafka-console-consumer.shtartet 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--from-beginning im Befehl ermöglicht das Konsumieren von Nachrichten, die vor dem Start des Verbrauchers veröffentlicht wurden. 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 SieCTRL+C, um den Verbraucher 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 Tierpfleger-Statusdaten]] == 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 durch das FelddataDirin der Konfigurationsdatei~/kafka/config/zookeeper.propertiesangegeben wird. Sie müssen den Wert dieses Felds lesen, um das zu sichernde Verzeichnis zu bestimmen. Standardmäßig zeigtdataDir auf das Verzeichnis/tmp/zookeeper. Wenn der Wert in Ihrer Installation unterschiedlich ist, ersetzen Sie/tmp/zookeeper in den folgenden Befehlen durch diesen Wert.

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

~/kafka/config/zookeeper.properties

...
...
...
# the directory where the snapshot is stored.
dataDir=/tmp/zookeeper
# 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/kafka/zookeeper-backup.tar.gz /tmp/zookeeper/*

Die Ausgabetar: Removing leading / from member namesdes Befehls können Sie ignorieren.

Die Flags-c und-z weisentar an, ein Archiv zu erstellen und die gzip-Komprimierung auf das Archiv anzuwenden. Das Flag-f gibt den Namen der ausgegebenen komprimierten Archivdatei an, in diesem Fallzookeeper-backup.tar.gz.

Sie könnenls in Ihrem aktuellen Verzeichnis ausführen, umzookeeper-backup.tar.gz 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]] == 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 Feldlog.dirsin der Konfigurationsdatei~/kafka/config/server.propertiesangibt. Sie müssen den Wert dieses Felds lesen, um das zu sichernde Verzeichnis zu bestimmen. Standardmäßig und in Ihrer aktuellen Installation zeigtlog.dirs auf das Verzeichnis/tmp/kafka-logs. Wenn der Wert in Ihrer Installation unterschiedlich ist, ersetzen Sie/tmp/kafka-logs in den folgenden Befehlen durch den richtigen Wert.

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

~/kafka/config/server.properties

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

# A comma separated list of directories under which to store log files
log.dirs=/tmp/kafka-logs

# 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 zunächst den Kafka-Dienst, damit die Daten im Verzeichnislog.dirs konsistent sind, wenn Sie das Archiv mittar erstellen. Kehren Sie dazu durch Eingabe vonexit zum Nicht-Root-Benutzer Ihres Servers zurück und führen Sie den folgenden Befehl aus:

sudo systemctl stop kafka

Melden Sie sich nach dem Beenden des Kafka-Dienstes erneut alskafka-Benutzer an mit:

sudo -iu kafka

Es ist erforderlich, die Kafka- und ZooKeeper-Dienste als Nicht-Root-Sudo-Benutzer zu stoppen / zu starten, da Sie in der Apache Kafka-Installationsvoraussetzung denkafka-Benutzer aus Sicherheitsgründen eingeschränkt haben. Dieser Schritt in der Voraussetzung deaktiviert den Sudo-Zugriff für den Benutzer vonkafka, was dazu führt, dass Befehle nicht ausgeführt werden.

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

tar -czf /home/kafka/kafka-backup.tar.gz /tmp/kafka-logs/*

Auch hier können Sie die Ausgabe des Befehls (tar: Removing leading / from member names) ignorieren.

Sie könnenls im aktuellen Verzeichnis ausführen, umkafka-backup.tar.gz als Teil der Ausgabe anzuzeigen.

Sie können den Kafka-Dienst erneut starten - wenn Sie die Daten nicht sofort wiederherstellen möchten -, indem Sieexit eingeben, zu Ihrem Nicht-Root-Sudo-Benutzer wechseln und dann Folgendes ausführen:

sudo systemctl start kafka

Melden Sie sich erneut als Benutzer Ihreskafkaan:

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 - Wiederherstellen der Tierpflegerdaten]] == Schritt 4 - Wiederherstellen 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 stellen die Daten in Ihrer vorhandenen Quellinstallation wieder her, indem Sie das ZooKeeper-Datenverzeichnis löschen und den Inhalt derzookeeper-backup.tar.gz-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 Sieexit eingeben, um zu Ihrem Nicht-Root-Sudo-Benutzer 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 erneut als Benutzer Ihreskafkaan:

sudo -iu kafka

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

rm -r /tmp/zookeeper/*

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

tar -C /tmp/zookeeper -xzf /home/kafka/zookeeper-backup.tar.gz --strip-components 2

Das Flag-C weisttar an, vor dem Extrahieren der Daten in das Verzeichnis/tmp/zookeeper zu wechseln. Sie geben das Flag--strip 2 an, damittar den Inhalt des Archivs in/tmp/zookeeper/elbst extrahiert und nicht in einem anderen Verzeichnis (z. B./tmp/zookeeper/tmp/zookeeper/).

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

[[Schritt 5 - Wiederherstellen der Kafka-Daten]] == 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 /tmp/kafka-logs/*

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 /tmp/kafka-logs -xzf /home/kafka/kafka-backup.tar.gz --strip-components 2

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

Nachdem Sie die Daten erfolgreich extrahiert haben, können Sie die Dienste Kafka und ZooKeeper erneut starten, indem Sieexit eingeben, zu Ihrem Nicht-Root-Sudo-Benutzer wechseln und dann Folgendes ausführen:

sudo systemctl start kafka

Starten Sie den ZooKeeper-Dienst mit:

sudo systemctl start zookeeper

Melden Sie sich erneut als Benutzer Ihreskafkaan:

sudo -iu kafka

Nachdem Sie die Daten vonkafkawiederhergestellt haben, können Sie im nächsten Abschnitt überprüfen, ob die Wiederherstellung erfolgreich ist.

[[Schritt 6 - Überprüfung der Wiederherstellung]] == Schritt 6 - Überprüfung der Wiederherstellung

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

Warten Sie einige Minuten, bis Kafka gestartet ist, und führen Sie dann den folgenden Befehl aus, um Nachrichten vonBackupTopic zu lesen:

~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic BackupTopic --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 einigen Minuten oder führen Siesudo systemctl restart kafka als Ihren Nicht-Root-Sudo-Benutzer 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 - Migrieren und Wiederherstellen des Backups auf einen anderen Kafka-Server optional]] == Schritt 7 - Migrieren und Wiederherstellen des Backups auf einen anderen Kafka-Server (optional)

In diesem Abschnitt migrieren Sie die gesicherten Daten vom Quell-Kafka-Server auf den Ziel-Kafka-Server. Dazu verwenden Sie zuerst den Befehlscp, um die komprimiertentar.gz-Dateien auf Ihr lokales System herunterzuladen. Anschließend verwenden Siescp erneut, 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 Quell- auf den Zielserver zu kopieren, da der Zielserver den SSH-Schlüssel Ihres Quellservers nicht in der/home/sammy/.ssh/authorized_keys-Datei hat und dies nicht kann 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 Dateienzookeeper-backup.tar.gz undkafka-backup.tar.gz auf Ihren lokalen Computer herunter, indem Sie Folgendes ausführen:

scp sammy@source_server_ip:/home/kafka/zookeeper-backup.tar.gz .

Sie sehen eine Ausgabe ähnlich der folgenden:

Outputzookeeper-backup.tar.gz                                                                                                  100%   68KB 128.0KB/s   00:00

Führen Sie nun den folgenden Befehl aus, um die Dateikafka-backup.tar.gz auf Ihren lokalen Computer herunterzuladen:

scp sammy@source_server_ip:/home/kafka/kafka-backup.tar.gz .

Sie werden die folgende Ausgabe sehen:

Outputkafka-backup.tar.gz                                                                                                       100% 1031KB 488.3KB/s   00:02

Wenn Siels im aktuellen Verzeichnis Ihres lokalen Computers ausführen, werden beide Dateien angezeigt:

Outputkafka-backup.tar.gz zookeeper.tar.gz

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

scp zookeeper-backup.tar.gz sammy@destination_server_ip:/home/sammy/zookeeper-backup.tar.gz

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

scp kafka-backup.tar.gz sammy@destination_server_ip:/home/sammy/kafka-backup.tar.gz

Sie haben die Sicherungsdateien erfolgreich auf den Zielserver hochgeladen. Da sich die Dateien im Verzeichnis/home/sammy/befinden und nicht über die richtigen Berechtigungen für den Zugriff des Benutzerskafkaverfügen, können Sie die Dateien in das Verzeichnis/home/kafka/verschieben und ihre Berechtigungen ändern.

SSH in den Zielserver durch Ausführen von:

ssh sammy@destination_server_ip

Verschieben Sie nunzookeeper-backup.tar.gz nach/home/kafka/, indem Sie Folgendes ausführen:

sudo mv zookeeper-backup.tar.gz /home/sammy/zookeeper-backup.tar.gz

Führen Sie auf ähnliche Weise den folgenden Befehl aus, umkafka-backup.tar.gz nach/home/kafka/ zu kopieren:

sudo mv kafka-backup.tar.gz /home/kafka/kafka-backup.tar.gz

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

sudo chown kafka /home/kafka/zookeeper-backup.tar.gz /home/kafka/kafka-backup.tar.gz

Die vorherigen Befehlemv undchown 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 Abschnittoperationsin der offiziellen Dokumentation von Kafka.

Um gesicherte Dateien wiezookeeper-backup.tar.gz undkafka-backup.tar.gz remote zu speichern, können SieDigital Ocean Spaces untersuchen. Wenn Kafka der einzige Dienst ist, der auf Ihrem Server ausgeführt wird, können Sie auch andere Sicherungsmethoden untersuchen, z. B. die vollständige Instanzbackups.