Système Message Queuing distribué par Kafka
1. Système de file d'attente de messages distribué, premier entré, premier sorti, tout en fournissant une fonction de mise en cache distribuée de données
2. Persistance des messages: la vitesse de lecture des données peut atteindre O (1) - lecture anticipée, écriture différée (en séquence, ABCDE, lecture A, lecture B; écriture supplémentaire à la fin) l'accès séquentiel au disque est plus que la mémoire accès rapide)
1. Raisons de la vitesse rapide de Kafka:
1. cache de cache +
2. Écriture séquentielle (données d'écriture, séquence de disques) +
3. Zéro copie (1. Laissez les données du cache du système d'exploitation être envoyées à la carte réseau 2. La carte réseau est transmise aux consommateurs en aval)
4. Envoi par lots + compression de données
Résumé de Kafka : système de journalisation distribué, partitionné, multi-copie, multi-abonné et distribué coordonné basé sur zookeeper
2. Pour garantir la fiabilité du message, au moins les paramètres suivants doivent être configurés: voir ci-dessous pour plus de détails.
Niveau du sujet: facteur de réplication> = 3; copies multiples
Niveau producteur: acks = -1; set producteur.type = sync en mode d'envoi simultané;
ack = -1: le producteur doit attendre que tous les abonnés de l'ISR confirment que les données sont reçues avant d'être considérées comme une transmission terminée, la fiabilité est la plus élevée
Niveau courtier: fermez l'élection de chef incomplète, c'est-à-dire impur.leader.election.enable = false;
Troisièmement, le rôle de kafka : tampon de message, flume million, alors que le Sparkstreaming ne peut gérer que des dizaines de milliers, le tampon Kafka est nécessaire au milieu
1. caractéristiques kafka:
- haut débit, faible latence : peut gérer des centaines de milliers de messages par seconde kafka , sa latence la plus faible de seulement quelques millisecondes
- Évolutivité : le cluster kafka prend en charge l'expansion thermique
- durabilité, fiabilité : le message est conservé sur le disque local et prend en charge la sauvegarde des données pour éviter la perte de données
- tolérance aux pannes : autorise l'échec des nœuds du cluster (si le nombre de copies est n, n-1 nœuds autorisent l'échec)
- haute concurrence : prend en charge des milliers de clients simultanément en lecture et en écriture
Scénarios d'application Kafka
Les principaux scénarios d'application sont: la collecte de journaux, le système de messagerie, le suivi de l'activité des utilisateurs, les indicateurs opérationnels, le traitement en continu, etc.
- Système de messagerie
- Système de journalisation
- Traitement de flux
2. Description des composants
• Kafka est distribué en interne et un cluster Kafka comprend généralement plusieurs courtiers
• Équilibrage de charge Zookeeper: divisez le sujet en plusieurs partitions , et chaque courtier stocke une ou plusieurs partitions
• Plusieurs producteurs et consommateurs produisent et consomment simultanément des messages
1. Courtier: chaque instance de kafka (serveur) peut être comprise comme une machine (nœud)
2.Producteur: Le producteur de messages publie des messages (écrit des messages) sur le terminal ou le service du cluster kafka.
-
Le producteur peut publier des données dans la rubrique qu'il spécifie et peut spécifier quels messages de la rubrique sont alloués à quelles partitions (par exemple, distribuez simplement chaque partition à son tour ou attribuez la clé à la partition correspondante en spécifiant la sémantique de la partition)
- Le producteur envoie le message directement au courtier de la partition correspondante sans aucune couche de routage.
- Le traitement par lots est envoyé lorsque les messages sont accumulés jusqu'à un certain nombre ou après avoir attendu pendant une certaine période de temps.
3. Consommateur: terminal ou service qui consomme des messages (données de lecture) du cluster Kafka .
-
Un mode de consommation plus abstrait: le streaming de groupes de consommateurs (consumer groupid)
- Cette méthode inclut la file d'attente traditionnelle et les méthodes de publication et d'abonnement
- Premièrement, les consommateurs se marquent avec un nom de groupe de consommateurs. Le message sera remis à une certaine instance de consommateur dans chaque groupe de consommateurs.
- Si toutes les instances de consommateurs ont le même groupe de consommateurs, c'est exactement comme la méthode de file d'attente traditionnelle.
- Si toutes les instances de consommateurs ont des groupes de consommateurs différents, c'est exactement comme la méthode traditionnelle de publication et d'abonnement.
- Un groupe de consommateurs est comme un abonné logique, et chaque abonné est composé de nombreuses instances de consommateurs (utilisées pour l'expansion ou la tolérance aux pannes).
- Par rapport au système de messagerie traditionnel, Kafka a une garantie de commande plus forte.
- Étant donné que la rubrique utilise des partitions, elle peut garantir la séquence et l'équilibre de la charge dans le fonctionnement de plusieurs processus Consumer .
- Les consommateurs du même groupe peuvent consommer des messages du même sujet en parallèle, mais les consommateurs du même groupe ne consommeront pas à plusieurs reprises
4. File d'attente de sujet ( concept virtuel) : catégorie à laquelle appartient chaque message publié dans le cluster kafka . Kafka est orienté sujet
Thème et décalage
• Une rubrique est une catégorie ou un nom de fil utilisé pour publier des messages. Le cluster Kafka utilise des journaux partitionnés et chaque partition est une séquence de messages qui est dans l'ordre et inchangée .
• Le journal de validation peut être ajouté en continu. Le message se voit attribuer une séquence d'identifiants appelée offset dans chaque partition pour identifier de manière unique le message dans la partition.
1. Qu'il y ait consommation ou non, le message sera nettoyé (s'il n'y a pas de consommation, le message sera toujours persistant et nettoyé à travers les deux configurations suivantes)
(1) Configurer la période de persistance: 7 jours (2) Configurer la quantité maximale de données
2. Conservez ce décalage dans le journal pour chaque consommateur . Habituellement, la valeur de décalage augmente linéairement lorsque les consommateurs lisent le message, mais en fait sa position est déterminée par le consommateur
Contrôle, il peut consommer des messages dans n'importe quel ordre. Par exemple, réinitialisez l'ancien décalage à retraiter.
3. Chaque partition représente une unité parallèle.
5. Partition : chaque rubrique contient une ou plusieurs partitions. L'unité allouée par kafka est la partition
-
Stockage, pour réaliser l'équilibrage de charge (différentes partitions peuvent être réparties sur différentes machines), pour assurer l'ordre des messages
-
Garantie de séquentialité: séquentialité locale (la séquence est garantie dans une certaine mesure: les messages d'abonnement sont lus du début à la fin et les messages d'écriture sont ajoutés à la fin)
-
La partition existe en tant que dossier
Dans la plupart des systèmes de messagerie, les messages sous le même sujet sont stockés dans une file d'attente. Le concept de partition est de diviser cette file d'attente en plusieurs petites files d'attente, chaque petite file d'attente est une partition, comme indiqué ci-dessous:
On peut le voir sur l'image ci-dessus. Lorsqu'il n'y a pas de partition, un seul consommateur d'une rubrique consomme la file d'attente de messages. Une fois le partitionnement adopté, s'il y a deux partitions et qu'au plus deux consommateurs consomment en même temps, la vitesse de consommation sera certainement plus rapide. Si vous pensez que ce n'est pas assez rapide, vous pouvez ajouter quatre partitions pour permettre à quatre consommateurs de consommer en parallèle.
La conception de la partition améliore considérablement le débit de Kafka! ! !
Cette image contient les points de connaissance suivants:
1. Une partition ne peut être consommée que par un seul consommateur du même groupe (une seule flèche sur la figure pointe vers une partition)
2. Un consommateur du même groupe peut consommer plusieurs partitions (le premier consommateur de la figure consomme les partitions 0 et 3)
3. L'efficacité de consommation la plus élevée est le même nombre de partitions et de consommateurs. Cela garantit que chaque consommateur est entièrement responsable d'une partition.
4. Le nombre de consommateurs ne peut pas être supérieur au nombre de partitions . En raison de la limitation du premier point, lorsqu'il y a plus de consommateurs que de partitions, il y aura des consommateurs inactifs.
5. Le groupe de consommateurs peut être considéré comme un cluster d'abonnés, dans lequel chaque consommateur est responsable des partitions qu'il consomme.
La relation entre le sujet et la partition:
Chaque partition est ordonnée et immuable.
Kafka peut garantir l'ordre de consommation des partitions, mais il ne peut pas garantir l'ordre de consommation des rubriques .
(1) Le sujet est un concept logique, la partition est un concept physique et une ou plusieurs partitions forment un sujet.
(2) Plusieurs partitions de la rubrique sont enregistrées sur le courtier sous forme de dossiers (le contenu de chaque dossier est différent), le numéro de série de chaque partition augmente à partir de 0 et les messages sont dans l'ordre
Remarque: en général, il y a autant de topocs que de tables, mais certaines tables du même type peuvent être pré-agrégées et stockées dans une rubrique
La partition comprend 2 parties: (1) journal d'index (informations d'index d'emplacement) (2) journal des messages (stocker des données réelles)
Recherche: Dichotomie + parcours séquentiel (Comment trouver rapidement la position d'une valeur dans une file d'attente de nombres séquentiels donnée?)
6. Segment: La partition est physiquement composée de plusieurs segments.
7. Décalage: chaque partition se compose d'une série de messages ordonnés et immuables , qui sont successivement ajoutés à la partition. Chaque message de la partition a un numéro de séquence en augmentation continue appelé offset , et l'offset offset est unique dans chaque partition.
Offset offset (il y a un offset dans le sujet), localiser la position de lecture des données (non seulement déterminer la position de l'offset de lecture, mais aussi quelle partition lire)
o ffset location : le nombre de messages (emplacement) que le consommateur a consommés sur la partition correspondante où l'offset est enregistré a une certaine relation avec la version de kafka.
Le décalage a été enregistré sur zookeeper avant la version 0.8 de kafka.
Après la version 0.8 de Kafka, le décalage est stocké sur le cluster Kafka.
-
LEO: le décalage du dernier message de chaque copie
-
HW: le plus petit décalage de tous les réplicas dans une partition
Désignation des décalages: les fichiers de stockage de Kafka portent le nom de offset.kafka. L'avantage d'utiliser offset comme nom est qu'il est facile à trouver. Par exemple, si vous souhaitez trouver l'emplacement à 2049, recherchez simplement le fichier 2048.kafka. Bien sûr, le premier offset est 00000000000.kafka.
Les messages de Kafka sont sans état, ce qui réduit la difficulté de mise en œuvre de Kafka. Les consommateurs doivent gérer eux-mêmes les informations d'état consommées.
8. Copie de réplique: Une copie de la partition pour assurer la haute disponibilité de la partition (plusieurs copies sont réalisées) .
Les copies multiples des partitions Kafka sont la garantie principale de la fiabilité de Kafka.L'écriture de messages sur plusieurs copies permet à Kafka d'assurer la durabilité et la fiabilité des messages en cas de crash.
Il existe plusieurs partitions sous la rubrique et chaque partition possède sa propre réplique. Une seule d'entre elles est une réplique principale et les autres sont des répliques suiveuses.
La relation entre le sujet, la partition et le réplica est la suivante:
-
La copie peut être définie par le paramètre de facteur de réplication lors de la définition du thème, ou peut être spécifiée en définissant defalut.replication-factor au niveau du courtier, généralement nous le définissons sur 3;
-
L'une des trois répliques est le leader et deux répliques sont les suiveurs. Le leader est responsable de la lecture et de l'écriture des messages, et le suiveur est chargé de répliquer régulièrement les derniers messages du leader pour assurer la cohérence des messages entre le suiveur et le leader . Quand le chef descend, il un nouveau chef est élu parmi les disciples à être responsable de la lecture et l' écriture des messages. Grâce à l'architecture de copie de la partition, bien que la redondance des données est introduite, la haute fiabilité de Kafka est garanti.
• suiveur: un rôle dans la réplique, qui réplique (fentch) les données du leader.
• leader: rôle dans la réplique, le producteur et le consommateur n'interagissent qu'avec le leader.
• Contrôleur: l'un des serveurs du cluster Kafka, utilisé pour l'élection du leader et divers basculements.
9. gardien de zoo :
Kafka utilise zookeeper pour stocker les méta-informations et le décalage du cluster.
Kafka doit être déployé conjointement avec zookeeper. Zookeeper garantit la disponibilité du système Kafka . Certaines informations de Topic doivent également être stockées dans Zookeeper.
(1) Kafka utilise zookeeper pour stocker les méta-informations du cluster.
(2) Une fois que le courtier où se trouve le contrôleur est en panne, le nœud temporaire disparaît à ce moment, et les autres courtiers du cluster surveilleront toujours le nœud temporaire. Si le nœud temporaire disparaît, ils se bousculeront pour créer à nouveau le nœud temporaire. pour s'assurer qu'un nouveau courtier deviendra le contrôleur.
Le courtier s'appuie toujours sur ZK, et zookeeper est également utilisé dans kafka pour élire les contrôleurs et vérifier si le courtier est en vie, etc.
zk conserve le même décalage:
10. Groupe de consommateurs:
Les consommateurs du même groupe peuvent consommer des messages du même sujet en parallèle, mais les consommateurs du même groupe ne consommeront pas de messages à plusieurs reprises.
Si le même sujet doit être utilisé plusieurs fois, cela peut être réalisé en configurant plusieurs groupes de consommateurs. Chaque groupe consomme séparément et ne s’affecte pas.
-
Dans l'API consommateur de haut niveau, chaque consommateur appartient à un groupe de consommateurs.
- Chaque message et partition ne peuvent être consommés que par un seul consommateur du groupe de consommateurs , mais peuvent être consommés par plusieurs groupes de consommateurs
Commande d'affichage:
11.Message message - unité de données kafka: (Flume-event, hdfs-block, Kafka - message)
Le message d'unité de données le plus basique de Kafka, le plus grand message de consommation ne peut pas dépasser 1M, qui peut être contrôlé par configuration
• Chaque producteur peut publier des messages sur un sujet. Si le consommateur s'abonne à ce sujet, le message nouvellement publié sera diffusé à ce consommateur.
• format du message: - longueur du message: 4 octets -1 vide - valeur "magique": 1 octet (numéro de version du contrat de service Kafka, compatible)
- crc32: 4 octets - horodatage 8 octets - charge utile: n octets
endurance kafka:
• La disposition du stockage Kafka est simple: chaque partition de sujet correspond à un journal logique (un journal est un ensemble de fichiers segmentés de même taille)
• Chaque fois qu'un producteur publie un message sur une partition, l'agent ajoute le message au dernier segment de fichier de segment . Lorsque le nombre de messages publiés atteint la valeur définie ou après un certain laps de temps, une section de fichiers est réellement vidée sur le disque. Une fois l'écriture terminée, le message est divulgué au consommateur.
• Contrairement aux systèmes de messagerie traditionnels, les messages stockés dans le système Kafka n'ont pas d'identifiant de message clair.
• Le message est exposé via un décalage logique dans le journal .
12. Haute efficacité de transmission: zéro copie, appel du noyau, copiez directement les données du disque sur le socket, au lieu de les transmettre via l'application.
copie zéro: afin de réduire la copie d'octets, Kafka utilise l'appel système sendfile fourni par la plupart des systèmes
Les messages de Kafka sont sans état, ce qui réduit la difficulté de mise en œuvre de Kafka. Les consommateurs doivent conserver les informations d'état consommées par eux - mêmes , et l' agent ne s'en soucie pas du tout.
Cette conception est très subtile, elle contient l'innovation elle-même
- La suppression d'un message de l'agent devient délicate car l'agent ne sait pas si le consommateur a déjà utilisé le message. Kafka résout ce problème de manière innovante en appliquant un simple SLA temporel à la politique de rétention. Lorsque le message est dans l'agent pendant un certain temps, il sera automatiquement supprimé.
- Avantage: les consommateurs peuvent délibérément revenir à l'ancien offset pour consommer à nouveau des données. Cela viole les conventions courantes des files d'attente, mais s'est avéré être une caractéristique fondamentale de nombreux consommateurs.
13. Garantie de livraison de fiabilité
• Kafka adopte la stratégie de livraison de messages au moins une fois par défaut . Autrement dit, la séquence de traitement côté consommateur consiste à obtenir le message -> traiter le message -> enregistrer l'emplacement . Cela peut entraîner le traitement des messages déjà traités par le client précédent lorsque le nouveau client prend le relais une fois que le client a raccroché.
• Trois stratégies de garantie:
- Au plus une fois, les messages peuvent être perdus, mais jamais une transmission répétée (rarement utilisée)
- Au moins un message ne sera jamais perdu, mais il peut être transmis à plusieurs reprises ( couramment utilisé )
- Exactement une fois, chaque message sera définitivement transmis une et une seule fois
Gestion des copies
• Kafka réplique le journal sur plusieurs serveurs désignés.
• L'unité de la copie est la partition. Dans des circonstances normales, chaque partition a un leader et 0 ou plusieurs suiveurs.
• Le leader gère toutes les demandes de lecture et d'écriture sur la partition correspondante. Le nombre de partitions peut être supérieur au nombre de courtiers, et le leader est également distribué.
• Le journal du suiveur est le même que celui du leader, et le suiveur réplique passivement le leader. Si le leader échoue, l'un des suiveurs deviendra automatiquement le nouveau leader.
14. Réplica synchronisé ISR set (copie synchronisée): le nombre de partitions suiveuses que la partition leader maintient synchronisées
Il existe plusieurs partitions pour les rubriques du cluster Kafka. Afin d'obtenir une haute disponibilité, une stratégie de copie de journal est adoptée:
--- Quand certaines machines raccrochent, si le leader raccroche, il doit être un suiveur dans l'ensemble ISR pour avoir une chance de devenir le leader. Parce que les données le représentant dans cette liste ISR sont synchronisées avec le leader.
Collection ISR, à condition que les adeptes de la collection aient la possibilité de devenir le leader.
Comment faire savoir au leader si le suiveur reçoit avec succès les données (battement de cœur, accusé de réception)
15. Comment juger d'être en vie:
(1) Battement de coeur
(2) Comment l'esclave peut suivre la mise à jour du leader pour ne pas tomber trop loin, cela est considéré comme efficace, sinon on considère que l'esclave est en panne, et l'esclave doit être retiré de l'ISR