Partage de technologie

Déduction du diagramme du cadre de base de Kafka

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Modèle à point unique

1. Notion nominale

  1. Courtier : fait référence à un nœud du cluster Kafka. Un cluster Kafka se compose de plusieurs courtiers qui travaillent ensemble pour gérer le stockage, la transmission et la consommation des messages. Le courtier gère une ou plusieurs partitions.

  2. Sujet : Le producteur envoie le message au sujet spécifié et le consommateur s'abonne au sujet pour obtenir le message. Le sujet lui-même n'est qu'un regroupement logique et n'a aucune notion de stockage physique.

  3. Cloison : Il s'agit d'un sous-ensemble de Topic et de l'unité de base permettant de stocker et de traiter réellement les messages dans Kafka. Chaque sujet peut être divisé en plusieurs partitions, et chaque partition est une séquence de messages ordonnée et immuable.

  4. Réplique: Une partition peut avoir plusieurs copies.

  5. Leader Courtier: Sous plusieurs copies d'une partition, courtier chargé de traiter toutes les demandes de lecture et d'écriture pour la partition.

  6. Courtier suiveur: Sous plusieurs copies d'une partition, le courtier chargé de synchroniser les données du leader se trouve dans la partition.

Insérer la description de l'image ici

Le producteur envoie le message (enregistrement) à Kafka et le consommateur obtient les données via le décalage (offset, similaire à un indice de tableau).

Dans le même temps, chaque partition aura son propre fichier journal. Kafka utilise des fichiers journaux pour enregistrer les données sur le disque.

2. Expansion horizontale du cluster distribué

1. Sujet plusieurs partitions

Insérer la description de l'image ici

À propos de la fabrication

Les producteurs se connectent au cluster Kafka via Bootstrap Broker. Cette étape consiste à établir la connexion initiale et à obtenir les métadonnées du cluster.

Une fois que le producteur obtient ces métadonnées, il sait qui est le courtier leader pour chaque partition et peut donc envoyer des messages directement au bon courtier leader.

Le producteur doit spécifier un sujet lors de l'envoi d'un message, mais le partitionnement est facultatif.

  • Aucune partition spécifiée : Si le producteur ne spécifie pas manuellement les partitions, Kafka distribuera les messages aux partitions selon la stratégie de partitionnement par défaut. La stratégie de partitionnement par défaut est la suivante :
    • Si le message contient une clé, Kafka déterminera la partition en fonction de la valeur de hachage de la clé. La même clé est toujours affectée à la même partition.
    • Si le message n'a pas de clé, Kafka utilisera l'interrogation ou la distribution aléatoire du message sur la partition pour garantir que le message est distribué uniformément.
  • Spécifier la partition : Les producteurs peuvent également spécifier explicitement des partitions lors de l'envoi de messages. De cette façon, les messages sont envoyés directement à la partition spécifiée.

Dans Kafka, lorsqu'un producteur envoie un message à un courtier, la première opération du courtier est d'enregistrer le message sur le disque pour garantir la persistance et la fiabilité du message.

À propos de la consommation

Les consommateurs de Kafka appartiennent généralement à un groupe de consommateurs. Chaque groupe de consommateurs possède un identifiant de groupe unique. Le concept de groupes de consommateurs est utilisé pour réaliser l'équilibrage de charge et la consommation parallèle des messages.

Lorsque plusieurs consommateurs appartiennent au même groupe, Kafka attribuera la partition Sujet aux consommateurs du groupe.Chaque partition ne peut être consommée que par un seul consommateur au sein du groupe, qui peut réaliser un équilibrage de charge.

  • Un seul consommateur s'abonne à un sujet

    • Si un seul consommateur s'abonne à un sujet, il recevra alors tous les messages du sujet.
  • Plusieurs consommateurs appartiennent au même groupe

    • Les partitions d'un sujet sont réparties entre les consommateurs du groupe. Chaque partition ne sera consommée que par un seul consommateur du groupe.
    • Si le nombre de consommateurs dépasse le nombre de partitions, les consommateurs excédentaires ne seront affectés à aucune partition et resteront inactifs. Ces consommateurs peuvent automatiquement reprendre leurs partitions lorsque d'autres consommateurs en sortent, obtenant ainsi une haute disponibilité.
    • Si le nombre de consommateurs est inférieur au nombre de partitions, certains consommateurs se verront attribuer plusieurs partitions.
  • Plusieurs consommateurs appartiennent à différents groupes

    • Chaque groupe consommera tous les messages du sujet indépendamment. Autrement dit, le message est diffusé à tous les consommateurs du groupe.

À propos de l'ajout de nouvelles partitions

Kafka créera de nouvelles partitions dans le cluster. Ces nouvelles partitions seront attribuées à différents courtiers pour obtenir un stockage équilibré et une haute disponibilité des données. Kafka ne redistribue ni n'équilibre automatiquement les données des partitions existantes vers les nouvelles partitions. Les nouvelles partitions sont vides dès leur création et les données ne seront écrites sur ces nouvelles partitions que lorsque les producteurs suivants enverront des messages. Le groupe de consommateurs détectera le changement du nombre de partitions et déclenchera un rééquilibrage.

2. Plusieurs copies de partitions

Insérer la description de l'image ici

Kafka permet à chaque partition d'avoir plusieurs répliques (Replica), qui sont stockées sur différents Brokers. Une réplique est appelée Leader et est responsable du traitement de toutes les demandes de lecture et d'écriture. Les autres répliques sont des Followers et sont responsables de la synchronisation des données du Leader.

Une seule copie de plusieurs copies peut lire et écrire en même temps, c'est-à-dire la copie Leader. Les autres copies deviennent des copies Follower et sont utilisées comme sauvegardes.