Comment installer Apache Kafka sur Ubuntu 14.04

introduction

Apache Kafka est un courtier de messagerie distribué largement répandu, conçu pour gérer efficacement de grands volumes de données en temps réel. Un cluster Kafka est non seulement hautement évolutif et tolérant aux pannes, mais il offre également un débit beaucoup plus élevé par rapport à d'autres courtiers de messages tels qu'ActiveMQ et RabbitMQ. Bien qu’il soit généralement utilisé comme système de messagerie pub / sub, de nombreuses organisations l’utilisent également pour l’agrégation de journaux car il offre un stockage persistant des messages publiés.

Dans ce tutoriel, vous allez apprendre à installer et utiliser Apache Kafka 0.8.2.1 sur Ubuntu 14.04.

Conditions préalables

Pour suivre, vous aurez besoin de:

[[step-1 -—- create-a-user-for-kafka]] == Étape 1 - Créer un utilisateur pour Kafka

Kafka pouvant gérer les requêtes sur un réseau, vous devez créer un utilisateur dédié. Cela minimise les dommages sur votre machine Ubuntu si le serveur Kafka est compris.

[.note] #Note: Après avoir configuré Apache Kafka, il est recommandé de créer un autre utilisateur non root pour effectuer d'autres tâches sur ce serveur.
#

En tant que root, créez un utilisateur appelékafka à l'aide de la commandeuseradd:

useradd kafka -m

Définissez son mot de passe en utilisantpasswd:

passwd kafka

Ajoutez-le au groupesudo afin qu'il dispose des privilèges requis pour installer les dépendances de Kafka. Cela peut être fait en utilisant la commandeadduser:

adduser kafka sudo

Votre utilisateur Kafka est maintenant prêt. Connectez-vous avecsu:

su - kafka

[[step-2 -—- install-java]] == Étape 2 - Installer Java

Avant d'installer des packages supplémentaires, mettez à jour la liste des packages disponibles afin d'installer les dernières versions disponibles dans le référentiel:

sudo apt-get update

Comme Apache Kafka a besoin d'un environnement d'exécution Java, utilisezapt-get pour installer le packagedefault-jre:

sudo apt-get install default-jre

[[step-3 -—- install-zookeeper]] == Étape 3 - Installer ZooKeeper

Apache ZooKeeper est un service open source conçu pour coordonner et synchroniser les informations de configuration des nœuds appartenant à un système distribué. Un cluster Kafka dépend de ZooKeeper pour effectuer, entre autres, des opérations telles que la détection de nœuds défaillants et l'élection de leaders.

Puisque le package ZooKeeper est disponible dans les référentiels par défaut d'Ubuntu, installez-le en utilisantapt-get.

sudo apt-get install zookeeperd

Une fois l'installation terminée, ZooKeeper sera automatiquement lancé en tant que démon. Par défaut, il écoutera sur le port2181.

Pour vous assurer qu'il fonctionne, connectez-vous via Telnet:

telnet localhost 2181

À l'invite Telnet, tapezruok et appuyez surENTER.

Si tout va bien, ZooKeeper diraimok et mettra fin à la session Telnet.

[[step-4 -—- download-and-extract-kafka-binaries]] == Étape 4 - Télécharger et extraire les fichiers binaires Kafka

Maintenant que Java et ZooKeeper sont installés, il est temps de télécharger et d'extraire Kafka.

Pour commencer, créez un répertoire appeléDownloads pour stocker tous vos téléchargements.

mkdir -p ~/Downloads

Utilisezwget pour télécharger les binaires Kafka.

wget "http://mirror.cc.columbia.edu/pub/software/apache/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz" -O ~/Downloads/kafka.tgz

Créez un répertoire appelékafka et accédez à ce répertoire. Ce sera le répertoire de base de l’installation de Kafka.

mkdir -p ~/kafka && cd ~/kafka

Extrayez l'archive que vous avez téléchargée à l'aide de la commandetar.

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

[[step-5 -—- configure-the-kafka-server]] == Étape 5 - Configurer le serveur Kafka

L'étape suivante consiste à configurer le serveur Kafka.

Ouvrezserver.properties en utilisantvi:

vi ~/kafka/config/server.properties

Par défaut, Kafka ne vous permet pas de supprimer des sujets. Pour pouvoir supprimer des sujets, ajoutez la ligne suivante à la fin du fichier:

~/kafka/config/server.properties

delete.topic.enable = true

Enregistrez le fichier et quittezvi.

[[step-6 -—- start-the-kafka-server]] == Étape 6 - Démarrez le serveur Kafka

Exécutez le scriptkafka-server-start.sh en utilisantnohup pour démarrer le serveur Kafka (également appelé courtier Kafka) en tant que processus d'arrière-plan indépendant de votre session shell.

nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 &

Attendez quelques secondes qu'il démarre. Vous pouvez être sûr que le serveur a démarré correctement lorsque vous voyez les messages suivants dans~/kafka/kafka.log:

extrait de ~ / kafka / kafka.log

...

[2015-07-29 06:02:41,736] INFO New leader is 0 (kafka.server.ZookeeperLeaderElector$LeaderChangeListener)
[2015-07-29 06:02:41,776] INFO [Kafka Server 0], started (kafka.server.KafkaServer)

Vous avez maintenant un serveur Kafka qui écoute sur le port9092.

[[step-7 -—- test-the-installation]] == Étape 7 - Test de l'installation

Publions et consommons maintenant un message“Hello World” pour nous assurer que le serveur Kafka se comporte correctement.

Pour publier des messages, vous devez créer un producteur Kafka. Vous pouvez facilement en créer un à partir de la ligne de commande en utilisant le scriptkafka-console-producer.sh. Il attend le nom d’hôte et le port du serveur Kafka, ainsi qu’un argument de sujet.

Publiez la chaîne“Hello, World” dans une rubrique appeléeTutorialTopic en tapant ce qui suit:

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

Comme le sujet n’existe pas, Kafka le créera automatiquement.

Pour consommer des messages, vous pouvez créer un consommateur Kafka à l'aide du scriptkafka-console-consumer.sh. Il attend le nom d’hôte et le port du serveur ZooKeeper, ainsi qu’un argument de sujet.

La commande suivante utilise les messages du sujet sur lequel nous avons publié. Notez l'utilisation de l'indicateur--from-beginning, qui est présent car nous voulons consommer un message qui a été publié avant le démarrage du consommateur.

~/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic TutorialTopic --from-beginning

S'il n'y a aucun problème de configuration, vous devriez maintenant voirHello, World dans la sortie.

Le script continuera à s'exécuter, en attendant que davantage de messages soient publiés dans le sujet. N'hésitez pas à ouvrir un nouveau terminal et à lancer un producteur pour publier quelques messages supplémentaires. Vous devriez pouvoir les voir tous instantanément dans la sortie du consommateur.

Lorsque vous avez terminé les tests, appuyez sur CTRL + C pour arrêter le script client.

[[step-8 -—- install-kafkat-optional]] == Étape 8 - Installer KafkaT (facultatif)

KafkaT est un petit outil pratique d’Airbnb qui facilite la visualisation des détails de votre cluster Kafka et l’exécution de quelques tâches administratives à partir de la ligne de commande. Comme c'est un joyau Ruby, vous aurez besoin de Ruby pour l'utiliser. Vous aurez également besoin du packagebuild-essential pour pouvoir construire les autres gemmes dont il dépend. Installez-les en utilisantapt-get:

sudo apt-get install ruby ruby-dev build-essential

Vous pouvez maintenant installer KafkaT à l'aide de la commandegem:

sudo gem install kafkat --source https://rubygems.org --no-ri --no-rdoc

Utilisezvi pour créer un nouveau fichier appelé.kafkatcfg.

vi ~/.kafkatcfg

Il s’agit d’un fichier de configuration que KafkaT utilise pour déterminer les répertoires d’installation et de journalisation de votre serveur Kafka. Il convient également de pointer KafkaT vers votre instance ZooKeeper. En conséquence, ajoutez les lignes suivantes:

~/.kafkatcfg

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

Vous êtes maintenant prêt à utiliser KafkaT. Pour commencer, voici comment vous l'utiliseriez pour afficher les détails de toutes les partitions Kafka:

kafkat partitions

Vous devriez voir la sortie suivante:

sortie de partitions kafkat

Topic           Partition   Leader      Replicas        ISRs
TutorialTopic   0             0           [0]           [0]

Pour en savoir plus sur KafkaT, reportez-vous à sesGitHub repository.

[[step-9 -—- set-up-a-multi-node-cluster-optional]] == Étape 9 - Configurer un cluster multi-nœuds (facultatif)

Si vous souhaitez créer un cluster multi-courtiers utilisant davantage de machines Ubuntu 14.04, vous devez répéter les étapes Étape 1, Étape 3, Étape 4 et Étape 5 sur chacune des nouvelles machines. De plus, vous devez apporter les modifications suivantes au fichierserver.properties dans chacun d'eux:

  • la valeur de la propriétébroker.id doit être modifiée pour qu'elle soit unique dans tout le cluster

  • la valeur de la propriétézookeeper.connect doit être modifiée de sorte que tous les nœuds pointent vers la même instance de ZooKeeper

Si vous souhaitez avoir plusieurs instances ZooKeeper pour votre cluster, la valeur de la propriétézookeeper.connect sur chaque nœud doit être une chaîne identique, séparée par des virgules, répertoriant les adresses IP et les numéros de port de toutes les instances ZooKeeper.

[[step-10 -—- restrict-the-kafka-user]] == Étape 10 - Restreindre l'utilisateur Kafka

Maintenant que toutes les installations sont terminées, vous pouvez supprimer les privilèges d’administrateur de l’utilisateurkafka. Avant de le faire, déconnectez-vous et reconnectez-vous comme n'importe quel autre utilisateur sudo non root. Si vous exécutez toujours la même session shell avec laquelle vous avez démarré ce didacticiel, tapez simplementexit.

Pour supprimer les privilèges d’administrateur de l’utilisateurkafka, supprimez-le du groupesudo.

sudo deluser kafka sudo

Pour améliorer encore la sécurité de votre serveur Kafka, verrouillez le mot de passe de l’utilisateurkafka à l’aide de la commandepasswd. Cela garantit que personne ne peut se connecter directement à celui-ci.

sudo passwd kafka -l

À ce stade, seul l'utilisateur root ou sudo peut se connecter en tant quekafka en tapant la commande suivante:

sudo su - kafka

À l'avenir, si vous souhaitez le déverrouiller, utilisezpasswd avec l'option-u:

sudo passwd kafka -u

Conclusion

Vous avez maintenant un Apache Kafka sécurisé fonctionnant sur votre serveur Ubuntu. Vous pouvez facilement l'utiliser dans vos projets en créant des producteurs et des consommateurs Kafka à l'aide deKafka clients qui sont disponibles pour la plupart des langages de programmation. Pour en savoir plus sur Kafka, parcourez sesdocumentation.