Construction du cluster Kafka et doit savoir

Construction du cluster Kafka et doit savoir

Déploiement et démarrage du cluster Kafka

Dans cet article, je vais montrer comment créer un cluster Kafka, puis présenter brièvement quelques connaissances de base sur le cluster Kafka. Cependant, cet article ne présente que le cluster et n'explique pas trop les concepts de base de Kafka. On suppose que le lecteur a une certaine connaissance de base de Kafka.

Tout d'abord, nous devons comprendre certains mécanismes du cluster Kafka:

  • Kafka prend naturellement en charge les clusters, même un nœud est en fait un mode cluster
  • Le cluster Kafka s'appuie sur Zookeeper pour la coordination, et beaucoup de données dans la première version de Kafka sont stockées dans Zookeeper
  • Tant que les nœuds Kafka sont enregistrés sur le même Zookeeper, cela signifie qu'ils sont dans le même cluster.
  • Kafka utilise brokerId pour distinguer les différents nœuds du cluster

La topologie de cluster de Kafka est la suivante:

Construction du cluster Kafka et doit savoir

Plusieurs rôles dans le cluster Kafka:

  • Courtier: fait généralement référence au nœud de déploiement de Kafka
  • Leader: Utilisé pour traiter les demandes de réception et de consommation de message, ce qui signifie que le producteur pousse le message vers le leader et que le consommateur interroge le message du leader.
  • Follower: Principalement utilisé pour sauvegarder les données des messages, un leader aura plusieurs followers

Dans cet exemple, afin de se rapprocher de la situation de déploiement réelle, quatre machines virtuelles sont utilisées pour la démonstration:

IP de la machine effet Rôles brokerId
192.168.99.1 Déployer le nœud Kafka serveur de courtier 0
192.168.99.2 Déployer le nœud Kafka serveur de courtier 1
192.168.99.3 Déployer le nœud Kafka serveur de courtier 2
192.168.99.4 Déployer des nœuds Zookeeper Coordinateur de cluster

Installation du gardien de zoo

Kafka est basé sur Zookeeper pour réaliser une coordination distribuée, vous devez donc créer un nœud Zookeeper avant de créer un nœud Kafka. Zookeeper et Kafka dépendent du JDK. J'ai déjà installé le JDK ici:

[[email protected] ~]# java --version
java 11.0.5 2019-10-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.5+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode)
[root@txy-server2 ~]#

Après avoir préparé l'environnement JDK, accédez à l'adresse de téléchargement du site officiel de Zookeeper et copiez le lien de téléchargement:

Ensuite, utilisez la commande wget pour télécharger sous Linux, comme suit:

[[email protected] ~]# cd /usr/local/src
[[email protected] /usr/local/src]# wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz

Décompressez le package compressé téléchargé, puis déplacez et renommez le répertoire décompressé:

[[email protected] /usr/local/src]# tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
[[email protected] /usr/local/src]# mv apache-zookeeper-3.6.1-bin ../zookeeper

Entrez dans le répertoire du fichier de configuration de Zookeeper, copiez l'exemple de fichier de configuration zoo_sample.cfg et nommez-le zoo.cfg, qui est le nom de fichier de configuration par défaut de Zookeeper:

[[email protected] /usr/local/src]# cd ../zookeeper/conf/
[[email protected] /usr/local/zookeeper/conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[[email protected] /usr/local/zookeeper/conf]# cp zoo_sample.cfg zoo.cfg

Modifiez l'élément de configuration dataDir dans le fichier de configuration pour spécifier un répertoire avec un espace disque plus important:

[[email protected] /usr/local/zookeeper/conf]# vim zoo.cfg
# 指定Zookeeper的数据存储目录,类比于MySQL的dataDir
dataDir=/data/zookeeper
[[email protected] /usr/local/zookeeper/conf]# mkdir -p /data/zookeeper

Si vous venez d'apprendre à utiliser, cette étape peut être ignorée.
Vous pouvez entrer dans le répertoire bin avec la configuration par défaut et utiliser le script de démarrage pour démarrer Zookeeper, comme illustré dans l'exemple suivant:

[[email protected] /usr/local/zookeeper/conf]# cd ../bin/
[[email protected] /usr/local/zookeeper/bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[[email protected] /usr/local/zookeeper/bin]#

Une fois le démarrage terminé, vous pouvez déterminer si le démarrage a réussi en vérifiant si le numéro de port est surveillé normalement. Le démarrage est réussi comme suit:

[[email protected] ~]# netstat -lntp |grep 2181
tcp6       0      0 :::2181       :::*         LISTEN      7825/java
[[email protected] ~]#

Si votre machine a un pare-feu activé, vous devez ouvrir le port Zookeeper, sinon les autres nœuds ne peuvent pas être enregistrés:

[[email protected] ~]# firewall-cmd --zone=public --add-port=2181/tcp --permanent
[[email protected] ~]# firwall-cmd --reload

Kafka

Après avoir installé Zookeeper, vous pouvez ensuite installer Kafka. Pour la même routine, allez d'abord sur le site officiel de Kafka pour télécharger l'adresse et copier le lien de téléchargement:

Ensuite, utilisez la commande wget pour télécharger sous Linux, comme suit:

[[email protected] ~]# cd /usr/local/src
[[email protected] /usr/local/src]# wget https://mirror.bit.edu.cn/apache/kafka/2.5.0/kafka_2.13-2.5.0.tgz

Décompressez le package compressé téléchargé, puis déplacez et renommez le répertoire décompressé:

[[email protected] /usr/local/src]# tar -xvf kafka_2.13-2.5.0.tgz
[[email protected] /usr/local/src]# mv kafka_2.13-2.5.0 ../kafka

Entrez dans le répertoire du fichier de configuration de Kafka et modifiez le fichier de configuration:

[[email protected] /usr/local/src]# cd ../kafka/config/
[[email protected] /usr/local/kafka/config]# vim server.properties
# 指定该节点的brokerId,同一集群中的brokerId需要唯一
broker.id=0
# 指定监听的地址及端口号,该配置项是指定内网ip
listeners=PLAINTEXT://192.168.99.1:9092
# 如果需要开放外网访问,则在该配置项指定外网ip
advertised.listeners=PLAINTEXT://192.168.99.1:9092
# 指定kafka日志文件的存储目录
log.dirs=/usr/local/kafka/kafka-logs
# 指定zookeeper的连接地址,若有多个地址则用逗号分隔
zookeeper.connect=192.168.99.4:2181
[[email protected] /usr/local/kafka/config]# mkdir /usr/local/kafka/kafka-logs

Après avoir terminé la modification du fichier de configuration, afin de faciliter l'utilisation des scripts de commande Kafka, nous pouvons configurer le répertoire bin de Kafka en variables d'environnement:

[[email protected] ~]# vim /etc/profile
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin
[[email protected] ~]# source /etc/profile  # 让配置生效

Vous pouvez donc démarrer Kafka avec la commande suivante:

[[email protected] ~]# kafka-server-start.sh /usr/local/kafka/config/server.properties &

Après avoir exécuté la commande ci-dessus, le journal de démarrage sera envoyé à la console. Vous pouvez juger si le démarrage a réussi via le journal, ou vous pouvez juger si le démarrage est réussi en vérifiant si le port 9092 est surveillé:

[[email protected] ~]# netstat -lntp |grep 9092
tcp6    0     0 192.168.99.1:9092     :::*      LISTEN     31943/java
[[email protected] ~]#

De même, si le pare-feu est activé, vous devez également ouvrir le numéro de port correspondant:

[[email protected] ~]# firewall-cmd --zone=public --add-port=9092/tcp --permanent
[[email protected] ~]# firwall-cmd --reload

Jusqu'à présent, nous avons terminé l'installation du premier nœud Kafka. Les étapes d'installation des deux autres nœuds sont également les mêmes. Il vous suffit de modifier le brokerId et l'ip de surveillance dans le fichier de configuration. Je copie donc directement le répertoire Kafka du nœud sur les deux autres machines:

[[email protected] ~]# rsync -av /usr/local/kafka 192.168.99.2:/usr/local/kafka
[[email protected] ~]# rsync -av /usr/local/kafka 192.168.99.3:/usr/local/kafka

Modifiez ensuite le brokerId et l'IP d'écoute de ces deux nœuds:

[[email protected] /usr/local/kafka/config]# vim server.properties
# 修改brokerId
broker.id=1
# 指定监听的地址及端口号,该配置项是指定内网ip
listeners=PLAINTEXT://192.168.99.2:9092
# 如果需要开放外网访问,则在该配置项指定外网ip
advertised.listeners=PLAINTEXT://192.168.99.2:9092
[[email protected] /usr/local/kafka/config]# 
[[email protected] /usr/local/kafka/config]# vim server.properties
# 修改brokerId
broker.id=2
# 指定监听的地址及端口号,该配置项是指定内网ip
listeners=PLAINTEXT://192.168.99.3:9092
# 如果需要开放外网访问,则在该配置项指定外网ip
advertised.listeners=PLAINTEXT://192.168.99.3:9092
[[email protected] /usr/local/kafka/config]# 

Une fois la modification de la configuration terminée, démarrez les deux nœuds selon les étapes décrites précédemment. Une fois le démarrage réussi, entrez Zookeeper, et il y a les données brokerId correspondantes sous / brokers / ids pour indiquer que le cluster est construit avec succès:

[[email protected] ~]# /usr/local/zookeeper/bin/zkCli.sh
[zk: localhost:2181(CONNECTED) 4] ls /brokers/ids
[0, 1, 2]
[zk: localhost:2181(CONNECTED) 5]

Collection de livres en double Kafka

À propos du jeu de répliques de Kafka:

  • L'ensemble de réplicas Kafka fait référence à la copie de plusieurs copies du journal. Nous savons que les données Kafka sont stockées dans des fichiers journaux, ce qui équivaut à la sauvegarde et à la redondance des données.
  • Kafka peut définir le nombre par défaut de jeux de répliques via la configuration
  • Kafka peut définir un jeu de répliques pour chaque sujet, de sorte que le jeu de répliques est relatif au sujet
  • Le jeu de répliques d'un sujet peut être réparti entre plusieurs courtiers. Lorsqu'un courtier échoue, il reste des données sur les autres courtiers, ce qui améliore la fiabilité des données, qui est également la fonction principale du jeu de répliques.

Nous savons tous que Topic dans Kafka n'est qu'un concept logique. Les données de stockage réelles sont Partition, c'est donc Partition qui est en fait copiée. Comme indiqué ci-dessous:

Construction du cluster Kafka et doit savoir

À propos du facteur de copie:

  • Le facteur de copie détermine en fait le nombre de copies d'une partition. Par exemple, le facteur de copie est 1, ce qui signifie que toutes les partitions de la rubrique seront copiées en fonction du nombre de courtiers et distribuées à chaque courtier.

L'algorithme d'allocation de copie est le suivant:

  • Trier tous les N Brokers et i Partitions à allouer
  • Attribuer la i-ième partition au (i mod n) Broker
  • Attribuez la j-ième copie de la i-ième partition au ((i + j) mod n) Broker

Raisons de l'échec du nœud Kafka et méthodes de traitement

Deux situations d'échec du nœud Kafka (Broker):

  • Le nœud Kafka et le battement de cœur de Zookeeper ne sont pas conservés en tant que défaillance du nœud
  • Lorsque le message du suiveur est trop loin derrière le leader, il sera considéré comme une défaillance du nœud

Gestion par Kafka des échecs de nœuds:

  • Kafka supprimera le nœud défaillant, il n'y a donc fondamentalement aucune perte de données due à une défaillance du nœud
  • La garantie sémantique de Kafka évite également en grande partie la perte de données
  • Kafka équilibre les messages au sein du cluster pour réduire la surchauffe des messages sur certains nœuds

Introduction au mécanisme d'élection de Kafka Leader

Élection du chef du cluster Kafka:

  • Si vous avez contacté d'autres composants distribués, vous saurez que la plupart des composants sont élus par vote pour élire un leader parmi de nombreux nœuds, mais à Kafka, le vote n'est pas utilisé pour élire le leader.
  • Kafka maintiendra dynamiquement un ensemble de copies des données Leader (ISR)
  • Kafka choisira un plus rapide dans les ISR en tant que leader

Construction du cluster Kafka et doit savoir

«Il est difficile pour une femme intelligente de cuisiner sans riz»: Kafka est dans une situation d'impuissance, c'est-à-dire que toutes les copies des ISR sont en panne. Dans ce cas, Kafka procédera par défaut à une élection de chef impur. Kafka propose deux méthodes de traitement différentes:

  1. Attendez que n'importe quel réplica dans l'ISR soit récupéré et sélectionnez-le comme chef de file

    • Un long temps d'attente réduira la disponibilité, ou toutes les répliques dans l'ISR ne peuvent pas être récupérées ou des données sont perdues, alors la partition ne sera jamais disponible
  2. Sélectionnez le premier réplica restauré comme nouveau chef, qu'il soit ou non dans l'ISR
    • Il ne contient pas tous les messages qui ont été précédemment validés par Leader, donc cela entraînera une perte de données, mais la disponibilité est élevée

Recommandations pour la configuration de l'élection du chef:

  • Désactiver l'élection d'un chef impur
  • Définir manuellement l'ISR minimum

Pour plus de détails sur ISR, veuillez consulter:

Lien d'origine: https://www.jianshu.com/p/cc0b90636715 Auteur: Duanwan Chit-Chat

Je suppose que tu aimes

Origine blog.51cto.com/mageedu/2547655
conseillé
Classement