Introduction à Pulsar et introduction au déploiement, aux principes et à l'utilisation de Pulsar

Introduction à Pulsar et introduction au déploiement, aux principes et à l'utilisation de Pulsar

Introduction à Pulsar

fond de naissance

Apache Pulsar est un système de messagerie distribué d'entreprise développé à l'origine par Yahoo. Il a été open source en 2016 et a été classé projet de haut niveau de la Fondation Apache en septembre 2018. Pulsar est utilisé dans l'environnement de production de Yahoo depuis plus de trois ans, servant principalement Mail, Finance, Sports, Flickr, la plateforme Gemini Ads et Sherpa (stockage KV de Yahoo).

Pulsar est une solution multi-tenant hautes performances pour la messagerie de serveur à serveur. Pulsar a été initialement développé par Yahoo et géré par Apache Software Foundation .

Caractéristiques

  • Prise en charge native de plusieurs clusters dans une instance Pulsar, géoréplication transparente des messages entre clusters.
  • Version extrêmement faible et latence de bout en bout.
  • S'adapte de manière transparente à plus d'un million de thèmes.
  • Une API client simple avec des liaisons pour Java, Go, Python et C++.
  • Plusieurs modes d'abonnement pour les sujets (exclusif, partagé et basculement).
  • Le stockage persistant des messages fourni par Apache BookKeeper garantit la livraison des messages.
  • Pulsar Functions, un framework informatique léger sans serveur, offre des capacités de traitement de données locales en streaming.
  • Pulsar IO, un framework de connecteurs sans serveur basé sur les fonctions Pulsar, facilite le déplacement de données vers et depuis Apache Pulsar.
  • À mesure que les données vieillissent, le stockage hiérarchisé décharge les données du stockage chaud/chaud vers le stockage froid/à long terme (tel que S3 et GCS).

Messagerie

Pulsar est basé sur le modèle d'abonnement de production publication-abonnement (pub-sub). Les producteurs publient des messages sur des sujets. Les consommateurs peuvent s'abonner à ces sujets pour traiter les messages et envoyer des messages de confirmation une fois le traitement terminé.

Mots clés Interprétation des mots
valeur Les données dans Pulsar sont stockées sous forme d'octets
clé Les messages peuvent être étiquetés par clé. Ceci est utile pour des choses comme la compression de sujets
propriétés Une carte facultative pour les paramètres de configuration utilisateur
ID de séquence Chaque message est placé dans une séquence ordonnée correspondant au sujet. Ce champ enregistre l'ordre séquentiel du message.
heure de publication L'heure de diffusion du message, l'horodatage de la diffusion du message (automatiquement attaché par le producteur)
heure de l'évènement L'application peut joindre un horodatage au message, un horodatage facultatif représentant l'heure à laquelle un événement s'est produit, par exemple l'heure à laquelle le message a été traité. Si elle n'est pas explicitement définie, l'heure de l'événement est 0.

producteur de messages

Mode d'envoi

Les producteurs publient des messages sur le sujet. Il existe deux modes d'envoi de messages : l'envoi synchrone et l'envoi asynchrone :

Mode illustrer:
Envoyer de manière synchrone Chaque fois que le producteur envoie un message, il doit attendre la confirmation du courtier. Si le message de confirmation n'est pas reçu, le producteur considère que l'envoi du message a échoué.
Envoyer de manière asynchrone Le producteur place le message dans la file d'attente de blocage et revient directement. Le client de Pulsar envoie des messages au courtier via un fil d'arrière-plan. Si la file d'attente est pleine, le producteur sera informé de l'échec du push lorsque le message sera à nouveau placé.

compression des messages

Lorsque les producteurs publient des messages, les données seront compressées pendant la transmission. Actuellement, les méthodes de compression prises en charge par Pulsar incluent LZ4, ZLIB, ZSTD et SNAPPY. Si le traitement par lots est activé, le producteur accumulera un lot de messages à envoyer en une seule requête. La taille du lot peut être définie par le nombre maximum de messages et le délai de publication maximum.

Envoi par lots (Batching)

Si le traitement par lots est activé, le producteur accumulera un lot de messages puis les enverra en une seule requête. La taille du lot dépend du nombre maximum de messages et du délai maximum de publication.

consommateur de messages

modèle de consommation

Les consommateurs reçoivent des messages de Topic pour le traitement des données. De même, la réception des messages est également divisée en deux modes : réception synchrone et réception asynchrone :

Mode illustrer:
réception synchrone La réception synchrone est bloquée jusqu'à ce qu'un message arrive
Réception asynchrone La réception asynchrone renvoie immédiatement une valeur future. Une fois qu'il y a un nouveau message, il est complété directement, comme en JavaCompletableFuture

Confirmation de consommation (ack)

  1. Lorsque le consommateur reçoit le message :

    Lorsque le consommateur traite avec succès un message, il enverra une demande de confirmation au courtier pour lui indiquer que le message peut être supprimé. Sinon, le courtier stockera toujours le message. Les messages peuvent être confirmés un par un ou cumulativement. Le consommateur n'a qu'à confirmer le dernier message reçu. Tous les messages impliqués dans ce flux ne seront pas restitués au consommateur.

  2. Quand le consommateur ne parvient pas à consommer

    Lorsque le consommateur ne parvient pas à traiter le message, il enverra une confirmation d'échec au courtier. À ce moment, le courtier renverra le message au consommateur. La confirmation d'échec peut être envoyée une par une ou cumulativement, en fonction de l'abonnement de consommation. mode. Dans les modes d'abonnement exclusif et de basculement, le consommateur ne parviendra qu'à accuser réception du dernier message reçu. Sur le client Pulsar, vous pouvez inciter le courtier à renvoyer automatiquement le message en définissant un délai d'attente. Si le consommateur n'envoie pas de demande de confirmation dans le délai d'expiration, le courtier renverra automatiquement le message au consommateur.

  3. Confirmer le délai d'attente

    Si le traitement d'un message continue d'échouer, le courtier sera amené à continuer de renvoyer le message au consommateur, rendant celui-ci incapable de traiter d'autres messages. Le mécanisme de sujet de lettre morte permet au consommateur de recevoir de nouveaux messages lorsqu'il ne peut pas consommer avec succès. Consommation, selon ce mécanisme, les messages qui ne peuvent pas être consommés sont stockés dans une rubrique distincte (sujet de lettre morte), et les utilisateurs peuvent décider comment traiter les messages dans cette rubrique.

Persistance des messages

La persistance des messages est obtenue via BookKeeper. Une fois la relation d'abonnement créée, Pulsar conservera tous les messages (même si le consommateur se déconnecte). Ces messages ne seront envoyés que lorsque le consommateur confirmera que les messages conservés ont été traités avec succès. Supprimez le message.

Il existe deux types de conservation des messages :

​ 1. Les messages contenus dans la politique de rétention peuvent être stockés de manière persistante dans Pulsar même si le consommateur a envoyé une confirmation. Les messages confirmés non couverts par la politique de rétention seront supprimés. S'il n'y a pas de politique de rétention, tous les messages confirmés seront supprimés. ;

2. Définissez le délai d'expiration du message, qui sera basé sur le délai d'expiration TTL appliqué à l'espace de noms. S'il expire, le message sera supprimé même s'il n'est pas confirmé.

Lorsqu'un message est envoyé à plusieurs reprises, vous pouvez choisir deux stratégies de persistance :

​ 1. Persistance des messages en double dans BookKeeper

​ 2. Il est jugé que s'il s'agit d'un message en double, aucune opération de persistance ne sera effectuée.

locataire

Pulsar prend en charge la multi-location depuis le début. Les noms des sujets sont hiérarchiques, avec les locataires en haut.

espace de noms

Un espace de noms est un terme de dénomination logique au sein d'un locataire. Un locataire peut créer plusieurs espaces de noms via l'API d'administration. Par exemple, un locataire qui connecte plusieurs applications peut créer un espace de noms différent pour chaque application.

Insérer la description de l'image ici

Sujet

Comme d'autres systèmes pub-sub, les sujets dans Pulsar sont des canaux nommés qui transmettent des messages des producteurs aux consommateurs :

{
    
    persistent|non-persistent}://tenant/namespace/topic
Mots clés Interprétation des mots
persistant|non persistant Identifie le type de sujet :
 Persistant : tous les messages sont conservés sur le disque (nœud BookKeeper)
Non persistant : les données n'existent qu'en mémoire. Lorsque le courtier est redémarré, les messages seront perdus.
locataire Locataire ; locataire du sujet dans l'instance. Les locataires constituent un élément important de la prise en charge multi-tenant de Pulsar et peuvent être dispersés dans le cluster.
espace de noms Utilisé comme mécanisme de regroupement pour les sujets. La plupart des configurations de sujets sont effectuées au niveau de l'espace de noms. Chaque locataire peut avoir plusieurs espaces de noms.
sujet Il peut être personnalisé par l'utilisateur. Le nom du sujet est au format libre et n'a pas de signification particulière dans l'instance Pulsar.

Lorsque le producteur écrit dans un sujet qui n'existe pas, il crée automatiquement le sujet sous l'espace de noms fourni.

Les utilisateurs n'ont pas besoin de créer explicitement un sujet dans Pulsar. Si le client tente d'écrire/recevoir des informations dans un sujet inexistant, Pulsar créera automatiquement le sujet sous l'espace de noms fourni par le sujet. Les consommateurs peuvent s'abonner à plusieurs sujets : configuré
par
nom :persistent://public/default/finance-.*
Configurer la liste d'abonnement aux sujets.
Les sujets réguliers ne peuvent être fournis que par un seul courtier, ce qui limite le débit maximum du sujet. Un sujet partitionné est un type spécial de sujet qui est traité par plusieurs courtiers, ce qui permet un débit plus élevé. Il n'y a aucune différence dans le fonctionnement du mode d'abonnement entre les sujets partitionnés et les sujets ordinaires. Vous pouvez spécifier le nombre de partitions lors de la création d'un sujet.

Modèle de routage des messages

Lors de la publication sur une rubrique de partition distribuée, le mode de routage doit être spécifié. Il existe trois modes de routage par défaut, le mode par défaut étant l'interrogation, similaire à Kafka.

modèle décrire
RoundRobinPartition Si aucune clé n'est fournie, les messages seront publiés sur chaque partition de manière à obtenir un débit maximal - le mode par défaut.
Partition unique Si la clé n'est pas fournie, le producteur sélectionne au hasard une partition et publie tous les messages sur cette partition. Si key est spécifié, la clé sera hachée (javaStringHash par défaut = Murmur3_32Hash recommandé pour les multi-clients) et le message attribué à la partition spécifique
Partition personnalisée Le partitionnement de messages spécifiques est effectué à l'aide d'une implémentation de routeur de messages personnalisée qui sera appelée. Les utilisateurs implémentent l'interface MessageRouter côté client Java pour implémenter des modes de routage personnalisés.

Mode d'abonnement aux messages (abonnement)

Pulsar propose trois modes d'abonnement : exclusif, partagé et basculement.

exclusif

Mode exclusif : Un seul consommateur est autorisé à s'abonner à un sujet, sinon une erreur sera signalée

En mode exclusif, un abonnement ne peut être utilisé que par un seul consommateur pour s'abonner à un sujet. Si plusieurs consommateurs utilisent le même abonnement pour s'abonner au même sujet, une erreur se produira. exclusif est le mode d'abonnement par défaut. Comme le montre la figure ci-dessous, le consommateur A-0 et le consommateur A-1 utilisent le même abonnement (le même groupe de consommateurs) et seul le consommateur A-0 est autorisé à consommer des messages.
Insérer la description de l'image ici

Basculement | Reprise après sinistre (basculement)

Mode de basculement : plusieurs consommateurs s'abonnent au même sujet, triés par nom de consommateur. Le premier consommateur est le seul à recevoir le message (le consommateur principal). Lorsque le consommateur principal se déconnecte, tous les messages suivants seront envoyés au consommateur suivant.

En mode de basculement, plusieurs consommateurs sont autorisés à utiliser le même abonnement pour s'abonner au sujet. Mais pour un sujet donné, le courtier sélectionnera un consommateur comme consommateur principal du sujet, et les autres consommateurs seront désignés comme consommateurs de basculement. Lorsque le consommateur principal perd la connexion, le sujet est réaffecté à l'un des consommateurs de basculement et le consommateur nouvellement attribué devient le nouveau consommateur principal. Lorsque cela se produit, tous les messages non reconnus seront transmis au nouveau consommateur principal. Ce processus est similaire au rééquilibrage des groupes de consommateurs dans Kafka.

Comme le montre la figure ci-dessous, le consommateur B-0 est le consommateur principal du sujet. Lorsque le consommateur B-0 perd la connexion, le consommateur B-1 peut devenir le nouveau consommateur principal pour consommer le sujet.
Insérer la description de l'image ici

partagé

Mode partagé : plusieurs consommateurs s'abonnent au même sujet, les messages sont envoyés entre consommateurs de manière cyclique et un message donné ne peut être envoyé qu'à un seul consommateur. Lorsque le consommateur se déconnecte, tous les messages sont envoyés à Les messages non acquittés seront reprogrammé à d'autres consommateurs.

En mode partagé, plusieurs consommateurs peuvent utiliser le même abonnement pour s'abonner à un sujet. Les messages sont distribués aux consommateurs sous forme d'interrogation, et chaque consommateur n'est envoyé qu'à un seul consommateur. Lorsqu'un consommateur perd la connexion, tous les messages non accusés de réception envoyés à ce consommateur seront reprogrammés pour être envoyés aux autres consommateurs abonnés à l'abonnement.

Cependant, l'ordre des messages ne peut pas être garanti et la confirmation par lots n'est pas prise en charge.

Comme le montre la figure ci-dessous, le consommateur C-1, le consommateur C-2 et le consommateur C-3 reçoivent des messages par interrogation.

Insérer la description de l'image ici

Clé partagée (key_shared)

mode key_shared : plusieurs consommateurs s'abonnent au même sujet, les messages sont délivrés entre les consommateurs de manière distribuée (<key, value>), les messages avec la même clé sont délivrés au même consommateur, et lorsque le consommateur se déconnecte, cela entraînera le consommateur correspondant à la clé à changer

En mode partagé, plusieurs consommateurs peuvent utiliser le même abonnement pour s'abonner à un sujet. Les messages sont distribués aux consommateurs en fonction de la clé, et les messages contenant la même clé ne sont envoyés qu'au même consommateur.

Comme le montre la figure ci-dessous, les différents consommateurs ne reçoivent que les messages correspondant aux clés.

Insérer la description de l'image ici

Architecture du principe Pulsar

Architecture

Au niveau le plus élevé, une instance Pulsar se compose d'un ou plusieurs clusters Pulsar, et les clusters de l'instance peuvent répliquer des données entre eux. Dans un cluster Pulsar, un ou plusieurs courtiers traitent et chargent les messages entrants des producteurs, envoient des messages aux consommateurs et communiquent avec le magasin de configuration Pulsar pour gérer diverses tâches de coordination. L'architecture du cluster Pulsar est la suivante, comprenant un ou plusieurs courtiers, Zookeeper pour la configuration et la coordination au niveau du cluster, BookKeeper pour le stockage persistant des messages, les clusters peuvent être répliqués entre clusters à l'aide de la géo-réplication

Insérer la description de l'image ici

Composants pulsars

Courtier

Le courtier Pulsar est un composant apatride et ne stocke pas lui-même les données. Principalement responsable du traitement des demandes des producteurs et des consommateurs, de la copie et de la distribution des messages et du calcul des données. On peut comprendre que Broker est sa propre instance de Pulsar.

Il se compose principalement de 2 parties :

  1. Serveur HTTP, exposé aux producteurs et aux consommateurs, utilisé pour gérer les tâches et l'API REST de recherche de sujets ;

  2. Scheduler, un serveur TCP asynchrone, via un protocole binaire personnalisé pour tous les transferts de données ;

Chaque cluster possède son propre Zookeeper local utilisé pour stocker la configuration et la coordination spécifiques au cluster, telles que les métadonnées de propriété, les rapports de chargement d'agent, les métadonnées du grand livre du comptable, etc.
Pulsar utilise BookKeeper pour le stockage persistant des messages. BookKeeper est un système de journaux à écriture anticipée distribué (WAL). Ses avantages sont : • Pulsar
utilise plusieurs journaux indépendants pour devenir des registres. Au fil du temps, plusieurs registres peuvent être créés pour les sujets.
• Fournit un système très efficace . stockage pour les données séquentielles répliquées
• Garantit la cohérence de la lecture du grand livre en cas de diverses pannes du système
• Fournit une distribution d'E/S pour plusieurs bookmakers
• S'étend horizontalement en termes de capacité et de débit. La capacité peut être augmentée en ajoutant plus de bookmakers au cluster
• Les bookmakers sont utilisé pour gérer les registres lus et écrits par des milliers de collègues. En utilisant plusieurs périphériques de disque (un pour les journaux et un pour le stockage), les bookmakers sont capables d'isoler la latence des opérations d'écriture. • En plus des données de message, le curseur de position d'abonnement du consommateur peut
également être stocké de manière persistante dans BookKeeper

La partition de chaque sujet sera attribuée à un certain courtier, et le producteur et le consommateur se connecteront à ce courtier pour envoyer et consommer des messages vers la partition du sujet. Le courtier est principalement responsable de la réplication et de la distribution des messages ainsi que du calcul des données.

Insérer la description de l'image ici

gardien de zoo

Il est principalement utilisé pour stocker les métadonnées, la configuration du cluster, la coordination des tâches (comme quel courtier est responsable de quel sujet) et la découverte de services (comme l'adresse du bookmaker découverte par le courtier).

comptable

Principalement utilisé pour le stockage persistant des données. En plus des données du message, les curseurs (curseurs) seront également conservés dans Bookeeper. Les curseurs sont les déplacements souscrits par le consommateur. Chaque nœud de stockage dans Bookkeeper est appelé bookmaker.

BookKeeper est un service de stockage optimisé pour les charges de travail en temps réel et est évolutif, hautement tolérant aux pannes et à faible latence. Une plate-forme de stockage en temps réel au niveau de l'entreprise doit répondre aux exigences suivantes :

  • Lecture et écriture de flux d'entrée avec une latence extrêmement faible (moins de 5 millisecondes)
  • Capacité à stocker des données de manière persistante, cohérente et tolérante aux pannes
  • Possibilité de diffuser ou de terminer lors de l'écriture de données
  • Stockez et accédez efficacement aux données historiques et en temps réel

Insérer la description de l'image ici

stockage de données

partition de données

Les données écrites dans le sujet peuvent représenter seulement quelques Mo, ou plusieurs To. Ainsi, dans certains cas, le débit du sujet est très faible, parfois très élevé, tout dépend du nombre de consommateurs. Alors, comment gérer la situation où le débit de certains sujets est très élevé et d’autres très faible ? Pour résoudre ce problème, Pulsar distribue les données d'un sujet sur plusieurs machines, ce qu'on appelle le partitionnement.

Lors du traitement de données volumineuses, le partitionnement est une méthode très courante pour garantir un débit élevé. Par défaut, les sujets Pulsar ne sont pas partitionnés, mais vous pouvez facilement créer des sujets partitionnés via des outils de ligne de commande ou des API et spécifier le nombre de partitions.

Après avoir créé un sujet de partition, Pulsar peut automatiquement partitionner les données sans affecter les producteurs et les consommateurs. En d’autres termes, une application écrit des données dans une rubrique et, après avoir partitionné la rubrique, il n’est pas nécessaire de modifier le code de l’application. Le partitionnement n'est qu'une opération d'exploitation et de maintenance, et l'application n'a pas besoin de se soucier de la manière dont le partitionnement est effectué.

Les opérations de partitionnement de sujets sont gérées par un processus appelé courtier, et chaque nœud du cluster Pulsar exécute son propre courtier.

Insérer la description de l'image ici

Persistance des données

Une fois que le courtier Pulsar a reçu le message et l'a confirmé, il doit s'assurer que le message ne sera en aucun cas perdu. Contrairement à d'autres systèmes de messagerie, Pulsar utilise Apache BookKeeper pour garantir la durabilité. BookKeeper fournit un stockage persistant à faible latence. Une fois que Pulsar a reçu le message, il l'envoie à plusieurs nœuds BookKeeper (spécifiquement déterminés par le coefficient de réplication). Les nœuds écrivent les données dans le journal d'écriture anticipée (journal d'écriture anticipée) et enregistrent également une copie dans la mémoire. Le nœud force l'écriture du journal sur un stockage persistant avant d'accuser réception du message. Ainsi, même en cas de panne de courant, les données ne seront pas perdues. Étant donné que le courtier Pulsar envoie des données à plusieurs nœuds, il n'enverra un message de confirmation au producteur qu'après qu'une majorité de nœuds (quorum) auront confirmé que l'écriture a réussi. C'est ainsi que Pulsar garantit que les données ne sont pas perdues même en cas de panne matérielle, de panne de réseau ou d'autres pannes. Nous y reviendrons en détail dans les articles suivants.

Installation et déploiement de Pulsar

Préparation environnementale

Site officiel du projet Pulsar : http://pulsar.apache.org/

Adresse de téléchargement officielle de Pulsar : http://archive.apache.org/dist/pulsar/

Ce déploiement utilise la dernière version : http://archive.apache.org/dist/pulsar/pulsar-2.7.2/apache-pulsar-2.7.2-bin.tar.gz

Adresse de téléchargement du site Web officiel du JDK : https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html

Planification des machines

La création d'un cluster Pulsar nécessite au moins trois composants : le cluster ZooKeeper, le cluster BookKeeper et le cluster Broker (Broker est sa propre instance de Pulsar). Les trois composantes sont les suivantes :

Cluster ZooKeeper (composé de 3 nœuds ZooKeeper)
Cluster BookKeeper (bookie) (composé de 3 nœuds BookKeeper)
Cluster de courtiers (composé de 3 nœuds Pulsar)

Du point de vue des composants, au moins 3 machines sont nécessaires pour réutiliser les machines afin de déployer des composants. La recommandation officielle est de 6 machines (zk sépare séparément 3 machines + 3 machines pour déployer le bookmaker et le courtier). Si les composants n'interfèrent pas les uns avec les autres, 9 machines sont nécessaires. Voici une introduction au déploiement expérimental, utilisez simplement 3 unités. La différence dans le nombre de machines réside simplement dans le fait que les machines utilisées pour démarrer le service sont différentes, et cela n'affecte pas la compréhension du déploiement et le tri des processus.

[Remarque :] Le package d'installation de Pulsar contient déjà diverses bibliothèques de composants nécessaires à la création d'un cluster. Il n'est pas nécessaire de télécharger séparément le package d'installation de ZooKeeper et le package d'installation de BookKeeper.

Utilisation de machines

Préparez 3 systèmes nus et propres. Pour cette expérience, utilisez Alibaba Cloud pour postuler aux machines (vous pouvez utiliser le paiement à l'utilisation et recycler et libérer après utilisation). S'il s'agit d'un environnement de production de test, le processus d'exploitation est le Il est recommandé d'utiliser plusieurs machines dans l'environnement de production et de déployer les composants séparément.

  1. Préparez 3 machines avec un environnement propre ; ou postulez pour 3 hôtes Alibaba Cloud (4C8G CentOS7)
    172.23.118.214 pulsar01
    172.23.118.215 pulsar02
    172.23.118.216 pulsar03

Préparation

[Remarque :] Cette version utilise l'utilisateur root. Les utilisateurs non root peuvent utiliser la commande sudo et effectuer certaines opérations non autorisées.

1. Changez le nom d'hôte du serveur

172.23.118.214 -> hostnamectl set-hostname pulsar01
172.23.118.215 -> hostnamectl set-hostname pulsar02
172.23.118.216 -> hostnamectl set-hostname pulsar03

2. Ajoutez la résolution d'hôte du fichier hosts à 3 machines pour simplifier les opérations.

[root@pulsar01 ~]# vim /etc/hosts

::1     localhost       localhost.localdomain   localhost6      localhost6.localdomain6
127.0.0.1       localhost       localhost.localdomain   localhost4      localhost4.localdomain4

# pulsar
172.23.118.214   pulsar01
172.23.118.215   pulsar02
172.23.118.216   pulsar03

3. La configuration est sans mot de passe, ce qui facilite le transfert des fichiers de répertoire et des packages d'installation

[root@pulsar01 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:56uK0ddMedu48pTC639dlwE7bIJLOyqkSQttJEhPrNc root@pulsar01
The key's randomart image is:
+---[RSA 2048]----+
|  .              |
| . o         .   |
|o + .     . . o  |
|.o + E   o o = . |
|  =     S * + . o|
| . + o   @ . = .o|
|  + * . o B = ..o|
|   + + o  .= .. .|
|    . o..o+++.   |
+----[SHA256]-----+
[root@pulsar01 ~]# 
[root@pulsar01 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
[root@pulsar01 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
[root@pulsar01 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
# 测试
[root@pulsar01 ~]# for i in pulsar01 pulsar02 pulsar03;do echo "=== $i ===" && ssh $i hostname;done
=== pulsar01 ===
pulsar01
=== pulsar02 ===
pulsar02
=== pulsar03 ===
pulsar03

4. Préparation du package d'installation

# 创建工作目录 module用来安装应用,software用来存放安装包
[root@pulsar01 ~]# for i in pulsar01 pulsar02 pulsar03;do ssh $i mkdir -p /opt/{module,software};done
[root@pulsar01 ~]# ls /opt/
module  software
# 把安装包上传或者wget至/opt/software/目录
[root@pulsar01 ~]# cd /opt/software/
[root@pulsar01 software]# ll
total 490480
-rw-r--r-- 1 root root 307228973 May 29 09:04 apache-pulsar-2.7.2-bin.tar.gz
-rw-r--r-- 1 root root 195013152 May 29 09:05 jdk-8u212-linux-x64.tar.gz
[root@pulsar01 software]# scp * pulsar02:/opt/software/ 
[root@pulsar01 software]# scp * pulsar03:/opt/software/

Installation et déploiement

1. Installez le JDK8

​ Installez JDK sur 3 serveurs (nécessite une version non inférieure à JDK 8)

​ Ce déploiement utilise : jdk-8u212-linux-x64.tar.gz

# 集群机器都需要安装配置jdk
[root@pulsar01 ~]# cd /opt/software/
[root@pulsar01 software]# tar -xf jdk-8u212-linux-x64.tar.gz -C /opt/module/
[root@pulsar01 software]# cd /opt/module/jdk1.8.0_212/
[root@pulsar01 jdk1.8.0_171]# pwd
/opt/module/jdk1.8.0_212
# 增加java环境变量
[root@pulsar01 jdk1.8.0_212]# vim /etc/profile
# JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=:$JAVA_HOME/lib/
export PATH JAVA_HOME CLASSPATH
[root@pulsar01 jdk1.8.0_212]#
# source引用环境变量
[root@pulsar01 jdk1.8.0_212]# source /etc/profile
# 验证是否生效
[root@pulsar01 jdk1.8.0_212]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b11, mixed mode)
[root@pulsar01 jdk1.8.0_212]# echo $JAVA_HOME
/opt/module/jdk1.8.0_212

# pulsar02 | pulsar03 操作相同

2. Décompressez Pulsar et configurez les variables d'environnement

# 解压到/opt/module目录
[root@pulsar01 software]# tar -xf apache-pulsar-2.7.2-bin.tar.gz -C /opt/module/
[root@pulsar01 software]# cd /opt/module/
[root@pulsar01 module]# ll
total 8
drwxr-xr-x 8 root root 4096 May 29 09:18 apache-pulsar-2.7.2
drwxr-xr-x 7   10  143 4096 Apr  2  2019 jdk1.8.0_212
# 更改应用目录名,便于管理
[root@pulsar01 module]# mv apache-pulsar-2.7.2 pulsar
[root@pulsar01 module]# cd pulsar/
# 目录结构
[root@pulsar01 pulsar]# ll
total 84
drwxr-xr-x 3  501 games  4096 May  3 20:07 bin		# Pulsar 命令行工具,比如 pulsar 和 pulsar-admin
drwxr-xr-x 5  501 games  4096 May  3 20:07 conf		# 配置文件,包含ZooKeeper,Bookeeper,Pulsar 等等
drwxr-xr-x 3 root root   4096 May 27 16:12 examples
drwxr-xr-x 4 root root   4096 May 27 16:12 instances
drwxr-xr-x 3 root root  20480 May 27 16:13 lib		# Pulsar 使用的 JAR 文件
-rw-r--r-- 1  501 games 31556 May  3 20:07 LICENSE
drwxr-xr-x 2  501 games  4096 May  3 20:07 licenses
-rw-r--r-- 1  501 games  6599 May  3 20:07 NOTICE
-rw-r--r-- 1  501 games  1269 May  3 20:03 README
[root@pulsar01 pulsar]# 
# 增加pulsar环境变量
[root@pulsar01 pulsar]# vim /etc/profile
#PULSAR_HOME
export PULSAR_HOME=/opt/module/pulsar
export PATH=$PATH:$PULSAR_HOME/bin
# 引用生效
[root@pulsar01 pulsar]# source /etc/profile

# pulsar02 | pulsar03 操作相同

3. Installez le gardien de zoo

# 更改zookeeper配置文件,配置必要内容
[root@pulsar01 pulsar]# cd conf/
# 配置文件最后增加如下配置,IP需对应修改
[root@pulsar01 conf]# vim zookeeper.conf

server.1=172.23.118.214:2888:3888
server.2=172.23.118.215:2888:3888
server.3=172.23.118.216:2888:3888

# 完成配置文件内容
[root@pulsar01 conf]# cat zookeeper.conf |grep -vE "^$|^#"
tickTime=2000
initLimit=10
syncLimit=5
dataDir=data/zookeeper
clientPort=2181
admin.enableServer=true
admin.serverPort=9990
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
forceSync=yes
server.1=172.23.118.214:2888:3888
server.2=172.23.118.215:2888:3888
server.3=172.23.118.216:2888:3888

# 根据配置文件dataDir=data/zookeeper配置,建立对应目录(目录是相对路径,相对于pulsar应用目录下)
[root@pulsar01 conf]# cd /opt/module/pulsar/
[root@pulsar01 pulsar]# mkdir -p data/zookeeper
[root@pulsar01 pulsar]# cd data/zookeeper/
# 每个Zookeeper节点的ID号不能重复,并且和server.N的编号对应,N依次为1,2,3(pulsar01->1 / pulsar02->2 / pulsar03->3)
[root@pulsar01 zookeeper]# echo 1 > myid
[root@pulsar01 zookeeper]# pwd
/opt/module/pulsar/data/zookeeper
[root@pulsar01 zookeeper]# ll
total 4
-rw-r--r-- 1 root root 2 May 27 16:37 myid
[root@pulsar01 zookeeper]# cat myid 
1
[root@pulsar01 zookeeper]# 
############################
# 【pulsar02机器】
[root@pulsar02 conf]# cd /opt/module/pulsar/
[root@pulsar02 pulsar]# mkdir -p data/zookeeper
[root@pulsar02 ~]# cd /opt/module/pulsar/data/zookeeper/
[root@pulsar02 zookeeper]# ls
myid
# 把myid文件中内容改为2
[root@pulsar02 zookeeper]# vim myid 
2
[root@pulsar02 pulsar]# 

############################
# 【pulsar03机器】
[root@pulsar03 conf]# cd /opt/module/pulsar/
[root@pulsar03 pulsar]# mkdir -p data/zookeeper
[root@pulsar03 software]# cd /opt/module/pulsar/data/zookeeper/
[root@pulsar02 zookeeper]# ls
myid
# 把myid文件中内容改为3
[root@pulsar03 zookeeper]# vim myid 
3
[root@pulsar03 pulsar]# 

4. Démarrez le gardien de zoo

# pulsar01
[root@pulsar01 zookeeper]# pulsar-daemon start zookeeper
[root@pulsar01 zookeeper]# jps
20237 ZooKeeperStarter
20415 Jps
[root@pulsar01 zookeeper]# netstat -tnlpu|grep 20237
tcp        0      0 172.23.118.214:3888      0.0.0.0:*               LISTEN      20237/java          
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      20237/java          
tcp        0      0 0.0.0.0:2181            0.0.0.0:*               LISTEN      20237/java          
tcp        0      0 0.0.0.0:9990            0.0.0.0:*               LISTEN      20237/java  

# pulsar02
[root@pulsar02 zookeeper]# pulsar-daemon start zookeeper
[root@pulsar02 zookeeper]# jps
20257 Jps
20071 ZooKeeperStartercd .
[root@pulsar02 zookeeper]# netstat -tnlpu|grep 20071
tcp        0      0 172.23.118.215:3888      0.0.0.0:*               LISTEN      20071/java          
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      20071/java          
tcp        0      0 0.0.0.0:2181            0.0.0.0:*               LISTEN      20071/java          
tcp        0      0 0.0.0.0:9990            0.0.0.0:*               LISTEN      20071/java          
tcp        0      0 172.23.118.215:2888      0.0.0.0:*               LISTEN      20071/java  

# pulsar03
[root@pulsar03 zookeeper]# pulsar-daemon start zookeeper
[root@pulsar03 zookeeper]# jps
10870 ZooKeeperStarter
20250 Jps
[root@pulsar03 zookeeper]# netstat -tnlpu|grep 10870
tcp        0      0 172.23.118.216:3888      0.0.0.0:*               LISTEN      10870/java          
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      10870/java          
tcp        0      0 0.0.0.0:2181            0.0.0.0:*               LISTEN      10870/java          
tcp        0      0 0.0.0.0:9990            0.0.0.0:*               LISTEN      10870/java 

5. Initialiser les métadonnées du cluster

Une fois le cluster ZooKeeper démarré avec succès, vous devez écrire certaines méta-informations du cluster Pulsar sur chaque nœud du cluster ZooKeeper. Étant donné que les données seront synchronisées les unes avec les autres au sein du cluster ZooKeeper, il vous suffit d'écrire les méta- informations à un nœud de ZooKeeper :

# 注意挑一台机器执行即可
[root@pulsar01 zookeeper]# pulsar initialize-cluster-metadata \
  --cluster pulsar-cluster-1 \
  --zookeeper 172.23.118.214:2181 \
  --configuration-store 172.23.118.214:2181 \
  --web-service-url http://172.23.118.214:8080,172.23.118.215:8080,172.23.118.216:8080 \
  --broker-service-url pulsar://172.23.118.214:6650,172.23.118.215:6650,172.23.118.216:6650
  
  ...
  ....
09:35:18.340 [main] INFO  org.apache.bookkeeper.stream.storage.impl.cluster.ZkClusterInitializer - Successfully initialized the stream cluster : 
num_storage_containers: 16
09:35:18.341 [Curator-Framework-0] INFO  org.apache.curator.framework.imps.CuratorFrameworkImpl - backgroundOperationsLoop exiting
09:35:18.447 [main] INFO  org.apache.zookeeper.ZooKeeper - Session: 0x100002585920003 closed
09:35:18.447 [main-EventThread] INFO  org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x100002585920003
09:35:18.674 [main] INFO  org.apache.zookeeper.ZooKeeper - Session: 0x100002585920000 closed
09:35:18.674 [main-EventThread] WARN  org.apache.pulsar.zookeeper.ZookeeperClientFactoryImpl - Unexpected ZK event received: WatchedEvent state:Closed type:None path:null
09:35:18.674 [main-EventThread] INFO  org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x100002585920000
09:35:18.776 [main] INFO  org.apache.zookeeper.ZooKeeper - Session: 0x100002585920001 closed
09:35:18.776 [main-EventThread] WARN  org.apache.pulsar.zookeeper.ZookeeperClientFactoryImpl - Unexpected ZK event received: WatchedEvent state:Closed type:None path:null
09:35:18.776 [main] INFO  org.apache.pulsar.PulsarClusterMetadataSetup - Cluster metadata for 'pulsar-cluster-1' setup correctly
09:35:18.776 [main-EventThread] INFO  org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x100002585920001

La description des paramètres est la suivante :

paramètre illustrer
-grappe nom de l'amas de pulsars
–gardien de zoo L'adresse du gardien de zoo doit uniquement inclure n'importe quelle machine du cluster zookeeer.
–magasin de configuration Pour configurer l'adresse de stockage, il vous suffit d'inclure n'importe quelle machine dans le cluster zookeeer.
–URL du service Web L'URL et le port du service Web du cluster Pulsar. Le port par défaut est 8080.
–url-service-courtier L'URL du service de courtier, utilisée pour interagir avec les courtiers du cluster Pulsar. Le port par défaut est 6650.

6. Vérifiez les métadonnées d'initialisation

Exécutez la commande de connexion client zookeeper pour vérifier la situation d'initialisation

[root@pulsar01 zookeeper]# pulsar zookeeper-shell
Connecting to localhost:2181
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
ls /
[admin, bookies, ledgers, managed-ledgers, namespace, stream, zookeeper]
ls /namespace
[]
ls /admin
[clusters, partitioned-topics, policies]
ls /admin/clusters
[global, pulsar-cluster-1]
quit

WATCHER::
WatchedEvent state:Closed type:None path:null
11:13:48.699 [main-EventThread] INFO  org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x1000010dffe0004
11:13:48.699 [main] INFO  org.apache.zookeeper.ZooKeeper - Session: 0x1000010dffe0004 closed

[Remarque 1 :] Après avoir appuyé sur la touche Entrée pour accéder à l'interface de ligne de commande, il n'y a aucun identifiant au début de la ligne. Vous pouvez utiliser diverses commandes ZooKeeper, telles que ls, get et d'autres commandes. Utilisez la commande quit pour quitter

[Remarque 2 :] Si l'initialisation échoue et que l'opération échoue, vous pouvez supprimer les deux chemins dans zookeeper, puis résoudre le problème et effectuer à nouveau l'initialisation.

# zk
/namespace
/admin/clusters/pulsar-cluster-1

7. Déployez le cluster BookKeeper

Modifier le fichier de configuration de Bookkeeper

# 配置zkServers参数 【3台机器修改】
[root@pulsar01 conf]# vim bookkeeper.conf 
zkServers=172.23.118.214:2181,172.23.118.215:2181,172.23.118.216:2181

Annuaire requis pour créer un bookmaker

# pulsar01、02、03
[root@pulsar01 conf]# cd /opt/module/pulsar/data/
[root@pulsar01 data]# mkdir bookkeeper

Exécutez la commande de métadonnées d'initialisation ; si vous y êtes invité, entrez Y et continuez (ne doit être exécutée qu'une seule fois sur un nœud bookmaker)

[root@pulsar01 data]# bookkeeper shell metaformat
JMX enabled by default
...
...
11:19:50.778 [main-EventThread] INFO  org.apache.bookkeeper.zookeeper.ZooKeeperWatcherBase - ZooKeeper client is connected now.
Ledger root already exists. Are you sure to format bookkeeper metadata? This may cause data loss. (Y or N) Y
11:19:56.614 [main] INFO  org.apache.bookkeeper.discover.ZKRegistrationManager - Successfully formatted BookKeeper metadata
11:19:56.718 [main] INFO  org.apache.zookeeper.ZooKeeper - Session: 0x3000010a3350000 closed
11:19:56.718 [main-EventThread] INFO  org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x3000010a3350000
[root@pulsar01 data]# 

Démarrer BookKeeper

[root@pulsar01 conf]# pulsar-daemon start bookie
doing start bookie ...
starting bookie, logging to /opt/module/pulsar/logs/pulsar-bookie-pulsar01.log
Note: Set immediateFlush to true in conf/log4j2.yaml will guarantee the logging event is flushing to disk immediately. The default behavior is switched off due to performance considerations.

############################################
[root@pulsar02 conf]# pulsar-daemon start bookie
doing start bookie ...
starting bookie, logging to /opt/module/pulsar/logs/pulsar-bookie-pulsar02.log
Note: Set immediateFlush to true in conf/log4j2.yaml will guarantee the logging event is flushing to disk immediately. The default behavior is switched off due to performance considerations.

############################################
[root@pulsar03 zookeeper]# pulsar-daemon start bookie
doing start bookie ...
starting bookie, logging to /opt/module/pulsar/logs/pulsar-bookie-pulsar03.log
Note: Set immediateFlush to true in conf/log4j2.yaml will guarantee the logging event is flushing to disk immediately. The default behavior is switched off due to performance considerations.

Les informations de démarrage du nœud sont stockées dans un fichier VERSION

[root@pulsar01 pulsar]# cd /opt/module/pulsar/data/bookkeeper/ledgers/current
[root@pulsar01 current]# cat VERSION 
4
bookieHost: "172.23.118.214:3181"
journalDir: "data/bookkeeper/journal"
ledgerDirs: "1\tdata/bookkeeper/ledgers"
instanceId: "f3d45b7f-f73a-4ded-acdc-3c2bad9e8311"

Vérifier l'état du cluster

Utilisez la commande la plus simple du shell Bookeeper sur n'importe quel nœud Bookeeper pour vérifier si tous les bookmakers du cluster ont été démarrés. 3 est le nombre de nœuds Bookeeper.

[root@pulsar01 pulsar]# bookkeeper shell simpletest --ensemble 3 --writeQuorum 3 --ackQuorum 3 --numEntries 3

Les significations des paramètres sont les suivantes :

-a,–ackQuorum Taille du quorum d'accusé de réception (par défaut 2) Lorsque le nombre spécifié d'accusés de réception du bookmaker répond, le message est considéré comme écrit avec succès. -e,–ensemble
Taille de l'ensemble (par défaut 3) Le nombre de nœuds bookie qui écrivent des données
-n ,–numEntries Entrées pour écrire (par défaut 1 000) le nombre de messages dans un lot de messages
-w,–writeQuorum Taille du quorum d'écriture (par défaut 2) le nombre de copies de chaque message

Cette commande créera le même nombre de registres que les bookmakers du cluster, y écrira quelques entrées, puis les lira et enfin supprimera le registre.

8. Déployer le cluster de pulsars

Modifier le fichier de configuration vim broker.conf

# pulsar01 pulsar02 pulsar03
[root@pulsar01 conf]# vim broker.conf 
# 配置pulsar broker连接的zookeeper集群地址
zookeeperServers=172.23.118.214:2181,172.23.118.215:2181,172.23.118.216:2181
configurationStoreServers=172.23.118.214:2181,172.23.118.215:2181,172.23.118.216:2181
clusterName=pulsar-cluster-1

Démarrer le cluster Pulsar

[root@pulsar01 software]# pulsar-daemon start broker
[root@pulsar02 software]# pulsar-daemon start broker
[root@pulsar03 software]# pulsar-daemon start broker

Vérifier l'état des nœuds des courtiers de cluster

[root@pulsar03 conf]# pulsar-admin brokers list pulsar-cluster-1
"pulsar01:8080"
"pulsar02:8080"
"pulsar03:8080"

9. Configurez le client pour se connecter au cluster Pulsar

# pulsar01 pulsar02 pulsar03
[root@pulsar01 conf]# vim client.conf

webServiceUrl=http://172.23.118.214:8080,172.23.118.215:8080,172.23.118.216:8080
# URL for Pulsar Binary Protocol (for produce and consume operations)
# For TLS:
# brokerServiceUrl=pulsar+ssl://localhost:6651/
brokerServiceUrl=pulsar://172.23.118.214:6650,172.23.118.215:6650,172.23.118.216:6650

10. Vérification en ligne de commande des messages de production et de consommation

Consommation:

[root@pulsar01 conf]# pulsar-client consume \
  persistent://public/default/pulsar-test \
  -n 100 \
  -s "consumer-test" \
  -t "Exclusive"

Changer une fenêtre pour produire :

[root@pulsar01 conf]# pulsar-client produce \
  persistent://public/default/pulsar-test \
  -n 1 \
  -m "Hello Pulsar"

Observez la sortie de la console consommateur.Si le contenu de sortie est content :Bonjour Pulsar, le processus est terminé ;

11、pulsar-dashboard

Utilisez Docker pour installer Apachepulsar/pulsar-dashboard

# 安装docker
[root@pulsar01 conf]# yum install -y docker
# 启动docker 并开机自启动
[root@pulsar01 conf]# systemctl start docker && systemctl enable docker
# 查看80端口是否被占用
[root@pulsar01 conf]# netstat -tnlpu|grep 80
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      1882/java           
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      13468/java          
udp        0      0 0.0.0.0:68              0.0.0.0:*                           809/dhclient        
# 运行apachepulsar/pulsar-dashboard
[root@pulsar01 conf]# docker run --name pulsar-dashboard -dit -p 80:80 -e SERVICE_URL=http://PULSARSEVERIP:8080 apachepulsar/pulsar-dashboard
# 查看镜像服务是否正常运行
[root@pulsar01 conf]# docker ps
CONTAINER ID        IMAGE                           COMMAND              CREATED             STATUS              PORTS                NAMES
ed6e1ec3da05        apachepulsar/pulsar-dashboard   "/pulsar/start.sh"   47 seconds ago      Up 44 seconds       0.0.0.0:80->80/tcp   pulsar-dashboard
[root@pulsar01 conf]# netstat -tnlpu|grep 80
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      1882/java           
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      13468/java          
tcp6       0      0 :::80                   :::*                    LISTEN      14877/docker-proxy- 
udp        0      0 0.0.0.0:68              0.0.0.0:*                           809/dhclient        

Insérer la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/wt334502157/article/details/117414153
conseillé
Classement