Comment sauvegarder, importer et migrer vos données Apache Kafka sur Debian 9

L’auteur a sélectionné Tech Education Fund pour recevoir un don dans le cadre du programme Write for DOnations .

introduction

La sauvegarde de vos données Apache Kafka est une pratique importante qui vous aidera à récupérer des pertes de données accidentelles ou des données incorrectes ajoutées au cluster en raison d’une erreur de l’utilisateur. Les sauvegardes de données de cluster et de sujet sont un moyen efficace d’effectuer des sauvegardes et des restaurations.

L’importation et la migration de vos données sauvegardées sur un serveur séparé sont utiles dans les cas où votre instance Kafka devient inutilisable en raison de pannes matérielles du serveur ou de la mise en réseau et que vous devez créer une nouvelle instance Kafka avec vos anciennes données. L’importation et la migration de données sauvegardées sont également utiles lorsque vous déplacez l’instance Kafka vers un serveur mis à niveau ou déclassé en raison d’une modification de l’utilisation des ressources.

Dans ce tutoriel, vous allez sauvegarder, importer et migrer vos données Kafka sur une seule installation de Debian 9 ainsi que sur plusieurs installations de Debian 9 sur des serveurs distincts. ZooKeeper est un élément essentiel du fonctionnement de Kafka. Il stocke des informations sur l’état du cluster, telles que les données de consommation, les données de partition et l’état des autres courtiers du cluster. En tant que tel, vous sauvegarderez également les données de ZooKeeper dans ce didacticiel.

Conditions préalables

Pour suivre, vous aurez besoin de:

  • Un serveur Debian 9 avec au moins 4 Go de RAM et un utilisateur sudo non-root est configuré à l’aide du the tutorial .

  • Un serveur Debian 9 sur lequel Apache Kafka est installé, servant de source à la sauvegarde. Suivez le Comment installer Apache Kafka sur Debian 9 pour configurer votre installation de Kafka, si Kafka n’est pas déjà installé sur le serveur source.

  • OpenJDK 8 installé sur le serveur. Pour installer cette version, suivez ces instructions: https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-debian-9#installing-the-default-jrejdk] sur l’installation de versions spécifiques d’OpenJDK.

  • Facultatif pour l’étape 7 - Un autre serveur Debian 9 sur lequel Apache Kafka est installé, pour agir en tant que destination de la sauvegarde. Suivez le lien de l’article dans les conditions préalables précédentes pour installer Kafka sur le serveur de destination. Cette condition préalable est requise uniquement si vous déplacez vos données Kafka d’un serveur à un autre. Si vous souhaitez sauvegarder et importer vos données Kafka sur un seul serveur, vous pouvez ignorer cette condition préalable.

Étape 1 - Créer un sujet de test et ajouter des messages

Un message Kafka * est l’unité de stockage de données la plus élémentaire de Kafka. Il s’agit de l’entité à laquelle vous publiez et vous abonnez. Un sujet Kafka * est comme un conteneur pour un groupe de messages liés. Lorsque vous vous abonnez à un sujet particulier, vous ne recevez que les messages publiés dans ce sujet particulier. Dans cette section, vous allez vous connecter au serveur que vous souhaitez sauvegarder (le serveur source) et ajouter un sujet Kafka et un message afin que vous disposiez de certaines données pour la sauvegarde.

Ce tutoriel suppose que vous avez installé Kafka dans le répertoire personnel de l’utilisateur * kafka * (+ / home / kafka / kafka +). Si votre installation se trouve dans un autre répertoire, modifiez la partie + ~ / + dans les commandes suivantes avec le chemin d’installation de votre Kafka, ainsi que pour les commandes du reste de ce didacticiel.

SSH sur le serveur source en exécutant:

ssh @

Exécutez la commande suivante pour vous connecter en tant qu’utilisateur * kafka *:

sudo -iu kafka

Créez une rubrique nommée ++ à l’aide du fichier d’utilitaire de shell + kafka-topics.sh + dans le répertoire bin de votre installation Kafka, en tapant:

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

Publiez la chaîne " Message de test 1 " dans la rubrique ++ à l’aide du script + ~ // bin / kafka-console-producer.sh +.

Si vous souhaitez ajouter des messages supplémentaires ici, vous pouvez le faire maintenant.

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

Le fichier + ~ // bin / kafka-console-producer.sh + vous permet de publier des messages directement à partir de la ligne de commande. En règle générale, vous publiez des messages à l’aide d’une bibliothèque cliente Kafka à partir de votre programme. Toutefois, comme cela implique différentes configurations pour différents langages de programmation, vous pouvez utiliser le script shell comme moyen indépendant de la langue de publier des messages lors des tests ou de l’exécution de tâches administratives. L’indicateur + - topic + spécifie le sujet sur lequel vous allez publier le message.

Ensuite, vérifiez que le script + kafka-console-producer.sh + a publié le (s) message (s) en exécutant la commande suivante:

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

Le script de shell + ~ // bin / kafka-console-consumer.sh + démarre le consommateur. Une fois démarré, il s’abonnera aux messages du sujet que vous avez publié dans le message " Test Message 1 " de la commande précédente. L’indicateur + - from-begin + de la commande permet de consommer des messages publiés avant le démarrage du consommateur. Si l’indicateur n’est pas activé, seuls les messages publiés après le démarrage du consommateur apparaissent. Lors de l’exécution de la commande, vous verrez la sortie suivante dans le terminal:

OutputTest Message 1

Appuyez sur + CTRL + C + pour arrêter le consommateur.

Vous avez créé des données de test et vérifié leur persistance. Vous pouvez maintenant sauvegarder les données d’état dans la section suivante.

Étape 2 - Sauvegarde des données d’état de ZooKeeper

Avant de sauvegarder les données Kafka réelles, vous devez sauvegarder l’état du cluster stocké dans ZooKeeper.

ZooKeeper stocke ses données dans le répertoire spécifié par le champ + dataDir + dans le fichier de configuration + ~ // config / zookeeper.properties +. Vous devez lire la valeur de ce champ pour déterminer le répertoire à sauvegarder. Par défaut, + dataDir + pointe vers le répertoire + / +. Si la valeur est différente dans votre installation, remplacez + / + par cette valeur dans les commandes suivantes.

Voici un exemple de sortie du fichier + ~ // 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
...
...
...

Maintenant que vous avez le chemin d’accès au répertoire, vous pouvez créer un fichier archive compressé de son contenu. Les fichiers d’archive compressés sont une meilleure option que les fichiers d’archive ordinaires pour économiser de l’espace disque. Exécutez la commande suivante:

tar -czf /home// //*

Sortie de la commande + tar: Supprimer les noms des membres d’avant / des membres + que vous pouvez ignorer en toute sécurité.

Les indicateurs + -c + et + -z + indiquent à + + tar + de créer une archive et d’appliquer la compression gzip à l’archive. L’indicateur `+ -f + spécifie le nom du fichier d’archive compressé en sortie, qui est ++ dans ce cas.

Vous pouvez exécuter + ls + dans votre répertoire actuel pour voir ++ dans votre sortie.

Vous avez maintenant sauvegardé les données ZooKeeper avec succès. Dans la section suivante, vous sauvegarderez les données Kafka réelles.

Étape 3 - Sauvegarder les sujets et les messages de Kafka

Dans cette section, vous allez sauvegarder le répertoire de données de Kafka dans un fichier tar compressé, comme vous l’aviez fait pour ZooKeeper à l’étape précédente.

Kafka enregistre les sujets, les messages et les fichiers internes dans le répertoire spécifié par le champ + log.dirs + dans le fichier de configuration + ~ // config / server.properties +. Vous devez lire la valeur de ce champ pour déterminer le répertoire à sauvegarder. Par défaut et dans votre installation actuelle, + log.dirs + pointe vers le répertoire `. Si la valeur est différente dans votre installation, remplacez ` dans les commandes suivantes par la valeur correcte.

Voici un exemple de sortie du fichier + ~ // 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
...
...
...

Tout d’abord, arrêtez le service Kafka afin que les données du répertoire + log.dirs + soient dans un état cohérent lors de la création de l’archive avec + tar +. Pour ce faire, revenez à l’utilisateur non root de votre serveur en tapant + exit + puis exécutez la commande suivante:

sudo systemctl stop kafka

Après avoir arrêté le service Kafka, reconnectez-vous en tant qu’utilisateur * kafka * avec:

sudo -iu kafka

Il est nécessaire d’arrêter / de démarrer les services Kafka et ZooKeeper en tant qu’utilisateur sudo non root car, dans les conditions préalables à l’installation d’Apache Kafka, vous avez restreint l’utilisateur * kafka * par mesure de sécurité. Cette étape du prérequis désactive l’accès sudo pour l’utilisateur * kafka *, ce qui entraîne l’échec de l’exécution des commandes.

Créez maintenant un fichier d’archive compressé contenant le contenu du répertoire en exécutant la commande suivante:

tar -czf /home// *

Une fois encore, vous pouvez ignorer en toute sécurité le résultat de la commande (+ tar: supprimer les noms des membres d’avant / des membres).

Vous pouvez exécuter + ls + dans le répertoire en cours pour voir ++ en tant que partie de la sortie.

Vous pouvez relancer le service Kafka - si vous ne voulez pas restaurer les données immédiatement - en tapant + exit +, pour passer à votre utilisateur sudo non-root, puis en exécutant:

sudo systemctl start kafka

Reconnectez-vous en tant qu’utilisateur * kafka *:

sudo -iu kafka

Vous avez sauvegardé avec succès les données Kafka. Vous pouvez maintenant passer à la section suivante, où vous restaurerez les données d’état du cluster stockées dans ZooKeeper.

Étape 4 - Restauration des données ZooKeeper

Dans cette section, vous allez restaurer les données d’état du cluster créées et gérées en interne par Kafka lorsque l’utilisateur effectue des opérations telles que la création d’un sujet, l’ajout / la suppression de nœuds supplémentaires, l’ajout et la consommation de messages. Vous allez restaurer les données sur votre installation source existante en supprimant le répertoire de données ZooKeeper et en restaurant le contenu du fichier ++. Si vous souhaitez restaurer des données sur un autre serveur, voir l’étape 7.

Par précaution, vous devez arrêter les services Kafka et ZooKeeper afin d’éviter que les répertoires de données reçoivent des données non valides pendant le processus de restauration.

Tout d’abord, arrêtez le service Kafka en tapant + exit +, pour basculer vers votre utilisateur sudo non-root, puis en exécutant:

sudo systemctl stop kafka

Ensuite, arrêtez le service ZooKeeper:

sudo systemctl stop zookeeper

Reconnectez-vous en tant qu’utilisateur * kafka *:

sudo -iu kafka

Vous pouvez ensuite supprimer en toute sécurité le répertoire de données du cluster existant à l’aide de la commande suivante:

rm -r //*

Maintenant, restaurez les données que vous avez sauvegardées à l’étape 2:

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

L’indicateur + -C + indique + tar + de changer de répertoire + / + avant d’extraire les données. Vous spécifiez le drapeau + - strip 2 + pour que + tar extrait le contenu de l’archive dans` + // + lui-même et non dans un autre répertoire (comme + / tmp / zookeeper / tmp / zookeeper / + `) à l’intérieur de celui-ci.

Vous avez restauré les données d’état du cluster avec succès. Maintenant, vous pouvez passer au processus de restauration de données Kafka dans la section suivante.

Étape 5 - Restauration des données Kafka

Dans cette section, vous allez restaurer les données Kafka sauvegardées sur votre installation source existante (ou sur le serveur de destination si vous avez suivi l’étape facultative 7) en supprimant le répertoire de données Kafka et en restaurant le fichier d’archive compressé. Cela vous permettra de vérifier que la restauration fonctionne correctement.

Vous pouvez supprimer en toute sécurité le répertoire de données Kafka existant à l’aide de la commande suivante:

rm -r *

Maintenant que vous avez supprimé les données, votre installation de Kafka ressemble à une nouvelle installation sans sujets ni messages. Pour restaurer vos données sauvegardées, extrayez les fichiers en exécutant:

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

L’indicateur + -C + indique à + ​​tar + de passer au répertoire ` avant d’extraire les données. Vous spécifiez l'indicateur `+ - strip 2 +` pour vous assurer que le contenu de l'archive est extrait dans ` lui-même et non dans un autre répertoire (tel que + / tmp / kafka-logs / kafka-logs / +) à l’intérieur de celui-ci.

Maintenant que vous avez extrait les données avec succès, vous pouvez redémarrer les services Kafka et ZooKeeper en tapant + exit +, pour passer à votre utilisateur sudo non-root, puis en exécutant:

sudo systemctl start kafka

Démarrez le service ZooKeeper avec:

sudo systemctl start zookeeper

Reconnectez-vous en tant qu’utilisateur * kafka *:

sudo -iu kafka

Vous avez restauré les données + kafka +, vous pouvez ensuite vérifier que la restauration a abouti dans la section suivante.

Étape 6 - Vérification de la restauration

Pour tester la restauration des données Kafka, vous utiliserez des messages provenant du sujet que vous avez créé à l’étape 1.

Attendez quelques minutes que Kafka démarre, puis exécutez la commande suivante pour lire les messages du ++:

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

Si vous recevez un avertissement comme celui-ci, vous devez attendre que Kafka démarre complètement:

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)

Réessayez la commande précédente dans quelques minutes ou exécutez + sudo systemctl restart kafka + en tant qu’utilisateur sudo non root. S’il n’y a pas de problèmes dans la restauration, vous verrez la sortie suivante:

OutputTest Message 1

Si vous ne voyez pas ce message, vous pouvez vérifier si vous avez manqué des commandes de la section précédente et les exécuter.

Maintenant que vous avez vérifié les données Kafka restaurées, cela signifie que vous avez correctement sauvegardé et restauré vos données dans une seule installation Kafka. Vous pouvez continuer à l’étape 7 pour voir comment migrer les données du cluster et des sujets vers une installation sur un autre serveur.

Étape 7 - Migration et restauration de la sauvegarde sur un autre serveur Kafka (facultatif)

Dans cette section, vous allez migrer les données sauvegardées du serveur Kafka source vers le serveur Kafka de destination. Pour ce faire, vous utiliserez d’abord la commande + scp + pour télécharger les fichiers + tar.gz + compressés sur votre système local. Vous utiliserez ensuite + scp + pour envoyer les fichiers au serveur de destination. Une fois que les fichiers sont présents sur le serveur de destination, vous pouvez suivre les étapes précédemment utilisées pour restaurer la sauvegarde et vérifier que la migration a réussi.

Vous téléchargez les fichiers de sauvegarde localement, puis vous les téléchargez sur le serveur de destination, au lieu de les copier directement de votre serveur source vers le serveur de destination, car le serveur de destination n’aura pas la clé SSH de votre serveur source dans son `+ / home //. Ssh / allowed_keys + `fichier et ne peut pas se connecter au serveur source. Votre ordinateur local peut toutefois se connecter aux deux serveurs, ce qui vous évite une étape supplémentaire de configuration de l’accès SSH du serveur source au serveur de destination.

Téléchargez les fichiers ` et ` sur votre machine locale en exécutant:

scp @:/home// .

Vous verrez une sortie similaire à:

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

Maintenant, lancez la commande suivante pour télécharger le fichier ++ sur votre ordinateur local:

scp @:/home// .

Vous verrez la sortie suivante:

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

Exécutez + ls + dans le répertoire actuel de votre machine locale, vous verrez les deux fichiers:

Output

Exécutez la commande suivante pour transférer le fichier ++ vers + / home // + du serveur de destination:

scp  @:/home//

Exécutez maintenant la commande suivante pour transférer le fichier + kafka-backup.tar.gz + vers + / home // + du serveur de destination:

scp  @:/home//

Vous avez chargé avec succès les fichiers de sauvegarde sur le serveur de destination. Les fichiers se trouvant dans le répertoire + / home // + et ne disposant pas des autorisations appropriées pour permettre à l’utilisateur * kafka * d’y accéder, vous pouvez déplacer les fichiers dans le répertoire + / home // + et modifier leur autorisations.

SSH sur le serveur de destination en exécutant:

ssh @

Maintenant déplacez ++ vers + / home // + en exécutant:

sudo mv  /home//

De même, exécutez la commande suivante pour copier ++ dans + / home // +:

sudo mv  /home//

Changez le propriétaire des fichiers de sauvegarde en exécutant la commande suivante:

sudo chown kafka /home// /home//

Les commandes + mv + et + + chown + précédentes n’afficheront aucune sortie.

Maintenant que les fichiers de sauvegarde sont présents sur le serveur de destination dans le bon répertoire, suivez les commandes répertoriées aux étapes 4 à 6 de ce didacticiel pour restaurer et vérifier les données de votre serveur de destination.

Conclusion

Dans ce tutoriel, vous avez sauvegardé, importé et migré vos sujets et messages Kafka à partir de la même installation et d’installations sur des serveurs distincts. Si vous souhaitez en savoir plus sur d’autres tâches administratives utiles à Kafka, vous pouvez consulter la section operations de la documentation officielle de Kafka.

Pour stocker des fichiers sauvegardés tels que + zookeeper-backup.tar.gz + et + kafka-backup.tar.gz + à distance, vous pouvez explorer DigitalOcean Spaces . Si Kafka est le seul service exécuté sur votre serveur, vous pouvez également explorer d’autres méthodes de sauvegarde, telles que l’instance complète backups.