360 votes

Comprendre les sujets et les partitions de Kafka

Je commence à apprendre Kafka pour solution d'entreprise de fins.

Au cours de mes lectures, quelques questions me sont venues en tête:

  1. Lorsqu'un producteur est la production d'un message - Il préciser le sujet qu'il veut envoyer le message, est-ce que le droit? Est-il des soins sur les partitions?
  2. Lorsqu'un abonné est en cours d'exécution - T-il de préciser son id de groupe de sorte qu'il peut être partie d'un groupe de consommateurs d'un même sujet ou plusieurs sujets de ce groupe de consommateurs est intéressé?
  3. Est-ce que chaque groupe de consommateurs ont une partition correspondante sur le courtier ou est-ce que chaque consommateur en avoir un?

  4. Comme les partitions créées par le courtier, donc pas un sujet de préoccupation pour les consommateurs?

  5. Puisque c'est une file d'attente avec un décalage pour chaque partition, il est de la responsabilité du consommateur de spécifier les messages qui il veut lire? Est-il besoin de sauvegarder son état?

  6. Ce qui se passe quand un message est supprimé de la file d'attente? - Par exemple: La rétention a été pendant 3 heures, puis le temps passe, comment est le décalage traitée sur les deux côtés?

370voto

MR Srinivas Points 1730

Ce post a déjà accepté de répondre, mais j'ajoute mon point de vue avec quelques photos de Kafka Guide Définitif

Avant de répondre à chaque question, nous allons ajouter un aperçu de producteur de composants

overview of producer components

1. Lorsqu'un producteur est la production d'un message - Il préciser le sujet, il veut envoyer le message, est-ce que le droit? Est-il des soins sur les partitions?

Le producteur doit décider de la partition cible pour placer tout message est dépend de la

  • Id de Partition, si elle est spécifié avec message
  • key % num partitions, si aucun id de partition ne sont pas mentionnés
  • Round robin si aucun id de partition , ni message clé disponible dans le message, signifie que la valeur

2. Lorsqu'un abonné est en cours d'exécution - T-il de préciser son id de groupe de sorte qu'il peut être partie d'un groupe de consommateurs d'un même sujet ou plusieurs sujets de ce groupe de consommateurs est intéressé?

Vous devez toujours configurer groupe.id sauf si vous utilisez la simple affectation de l'API et vous n'avez pas besoin de stocker les offsets dans Kafka. Il ne sera pas partie d'un groupe. source

3. Est-ce que chaque groupe de consommateurs ont une partition correspondante sur le courtier ou est-ce que chaque consommateur en avoir un?

Dans un groupe de consommateurs, chaque partition seront traitées par un consommateur à la fois seulement. Ces scénarios sont possibles

  • Nombre de consommateurs de moins que le numéro de la rubrique partitions de puis plusieurs partitions peuvent être attribués à l'un des consommateurs dans le groupe number of consumers less than topic partitions
  • Nombre de consommateurs de même que le nombre de rubrique partitions, partition et de la consommation de cartographie peut être comme ci-dessous, number of consumers same as number of topic partitions
  • Nombre de consommateurs de plus que le numéro de la rubrique partitions, partition et de la consommation de cartographie peut être comme ci-dessous, n'est Pas efficace, vérifier la Consommation de 5 number of consumers more than number of topic partitions

4. Comme les partitions créées par le courtier, donc pas un sujet de préoccupation pour les consommateurs?

Le consommateur doit être conscient du nombre de partitions, comme nous en avons discuté sur la question 3.

5. Puisque c'est une file d'attente avec un décalage pour chaque partition, il est de la responsabilité du consommateur de spécifier les messages qui il veut lire? Est-il besoin de sauvegarder son état?

Kafka prend soin de décalage de l'état internallay par la production d'un message à un de spécial __consommateur_décalages sujet, ce comportement peut être configurable manuel en enable.auto.commit de false. Dans ce cas consumer.commitSync() et consumer.commitAsync() peut être utile pour gérer le décalage.

6. Ce qui se passe quand un message est supprimé de la file d'attente? - Par exemple: La rétention a été pendant 3 heures, puis le temps passe, comment est le décalage traitée sur les deux côtés?

Si le consommateur commence après la période de conservation, les messages seront consommés que par auto.offset.reset configuration qui pourrait être latest/earliest. techniquement, c'est latest(démarrer le traitement de nouveaux messages) car tous les messages arrivés à expiration et la rétention est sujet au niveau de la configuration.

164voto

C4stor Points 2675

Prenons ces points dans l'ordre :)

1 - Lorsqu'un producteur est la production d'un message - Il préciser le sujet, il veut envoyer le message, est-ce que le droit? Est-il des soins sur les partitions?

Par défaut, le producteur n'a pas de soins sur le partitionnement. Vous avez la possibilité d'utiliser un outil de partitionnement personnalisé afin d'avoir un meilleur contrôle, mais c'est totalement facultatif.


2 - Lorsqu'un abonné est en cours d'exécution - T-il de préciser son id de groupe de sorte qu'il peut être partie d'un groupe de consommateurs d'un même sujet ou plusieurs sujets de ce groupe de consommateurs est intéressé?

Oui, les consommateurs de joindre (ou créer si elles sont seules) d'un groupe de consommateurs de partager la charge. Pas de deux consommateurs d'un même groupe reçoivent le même message.


3 - est-ce que chaque groupe de consommateurs ont une partition correspondante sur le courtier ou est-ce que chaque consommateur en avoir un?

Ni. Tous les consommateurs dans un groupe de consommateurs sont affectés à un ensemble de partitions, sous deux conditions : pas de deux consommateurs dans le même groupe toute partition en commun - et le groupe de consommateurs dans son ensemble est affectée à chaque partition existante.


4 - Sont les partitions créées par le courtier, donc pas un sujet de préoccupation pour les consommateurs?

Ils ne sont pas, mais vous pouvez voir à partir de 3 qu'il est totalement inutile d'avoir plus de consommateurs que les partitions existantes, il est donc de votre maximum de parallélisme au niveau de la consommation.


5 - Puisque c'est une file d'attente avec un décalage pour chaque partition, il est de la responsabilité du consommateur de spécifier les messages qui il veut lire? Est-il besoin de sauvegarder son état?

Oui, les consommateurs économisent un décalage par thème et par partition. C'est totalement manipulé par Kafka, pas de soucis à ce sujet.


6 - Ce qui se passe quand un message est supprimé de la file d'attente? - Par exemple: La rétention a été pendant 3 heures, puis le temps passe, comment est le décalage traitée sur les deux côtés?

Si un consommateur toujours demander un décalage pas disponible pour une partition sur les courtiers (par exemple, en raison de la suppression), il entre dans un mode d'erreur, et en fin de compte à zéro pour cette partition soit le plus récent ou le message le plus ancien disponible (en fonction de l'auto.décalage.réinitialiser la configuration de la valeur), et continuer à travailler.

30voto

machine_messiah Points 194

Kafka utilise le Thème de la conception qui vient mettre de l'ordre dans le flux de messages.

Pour équilibrer la charge, un sujet peut être divisé en plusieurs partitions et répliquées dans des courtiers.

Les Partitions sont commandés, immuable séquences de messages qui est continuellement ajouté c'est à dire un journal de validation.

Les Messages dans la partition ont une séquence de numéro d'identification qui identifie de manière unique chaque message au sein de la partition.

Partitions de permettre à un sujet du journal de l'échelle au-delà d'une taille pouvant aller sur un serveur unique (un courtier) et d'agir en tant qu'unité de parallélisme.

Les partitions d'un sujet sont répartis sur les courtiers dans le Kafka de cluster où chaque courtier gère les données et les demandes de partitions.

Chaque partition est répliqué sur un nombre configurable de courtiers pour assurer la tolérance aux pannes.

Bien expliqué dans cet article : http://codeflex.co/what-is-apache-kafka/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X