Je commence à apprendre Kafka à des fins de solution d'entreprise.
Au cours de mes lectures, quelques questions me sont venues à l'esprit:
Chaque groupe de consommateurs a-t-il une partition correspondante sur le courtier ou chaque consommateur en a-t-il une?
Les partitions sont-elles créées par le courtier et ne concernent-elles donc pas les consommateurs?
Puisqu'il s'agit d'une file d'attente avec un décalage pour chaque partition, le consommateur est-il responsable de spécifier les messages qu'il veut lire? A-t-il besoin de sauver son état?
Que se passe-t-il lorsqu'un message est supprimé de la file d'attente? - Par exemple: la rétention a duré 3 heures, puis le temps a passé, comment le décalage est-il traité des deux côtés?
Ce message a déjà des réponses, mais j'ajoute ma vue avec quelques images de Kafka Definitive Guide
Avant de répondre à chaque question, ajoutons un aperçu des composants du producteur:
1. Lorsqu'un producteur produit un message - Il précisera le sujet auquel il souhaite envoyer le message, est-ce exact? Cela concerne-t-il les partitions?
Le producteur décidera de la partition cible pour placer n'importe quel message, en fonction de:
2. Lorsqu'un abonné est en cours d'exécution - Spécifie-t-il son identifiant de groupe afin qu'il puisse faire partie d'un groupe de consommateurs du même sujet ou de plusieurs sujets qui intéressent ce groupe de consommateurs?
Vous devez toujours configurer group.id à moins que vous n'utilisiez la simple API d'attribution et que vous n'ayez pas besoin de stocker des décalages dans Kafka. Cela ne fera partie d'aucun groupe. source
3. Chaque groupe de consommateurs a-t-il une partition correspondante sur le courtier ou chaque consommateur en a-t-il une?
Dans un groupe de consommateurs, chaque partition sera traitée par un seul consommateur . Ce sont les scénarios possibles
4. Comme les partitions créées par le courtier, donc pas une préoccupation pour les consommateurs?
Le consommateur doit savoir le nombre de partitions, comme indiqué à la question 3.
5. Puisqu'il s'agit d'une file d'attente avec un décalage pour chaque partition, le consommateur est-il responsable de spécifier les messages qu'il souhaite lire? A-t-il besoin de sauver son état?
Kafka (à préciser , le coordinateur de groupe ) s'occupe de l'état de l'offset en produisant un message à destination d'un interne __ consumer_offsets , ce comportement peut également être configuré manuellement en définissant enable.auto.commit
sur false
. Dans ce cas, consumer.commitSync()
et consumer.commitAsync()
peuvent être utiles pour gérer le décalage.
En savoir plus sur le coordinateur de groupe :
6. Que se passe-t-il lorsqu'un message est supprimé de la file d'attente? - Par exemple: la rétention a duré 3 heures, puis le temps a passé, comment le décalage est-il traité des deux côtés?
Si un consommateur commence après la période de rétention, les messages seront utilisés conformément à la configuration de auto.offset.reset
, qui pourrait être latest/earliest
. techniquement, il s'agit de latest
(commencer à traiter les nouveaux messages) car tous les messages ont expiré à ce moment-là et conservation correspond à la configuration au niveau du sujet.
Prenons-les dans l'ordre :)
1 - Lorsqu'un producteur produit un message - Il précisera à quel sujet il veut envoyer le message, est-ce exact? Cela concerne-t-il les partitions?
Par défaut, le producteur ne se soucie pas du partitionnement. Vous avez la possibilité d'utiliser un partitionneur personnalisé pour avoir un meilleur contrôle, mais c'est totalement facultatif.
2 - Lorsqu'un abonné est en cours d'exécution - Spécifie-t-il son identifiant de groupe afin qu'il puisse faire partie d'un groupe de consommateurs du même sujet ou de plusieurs sujets qui intéressent ce groupe de consommateurs?
Oui, les consommateurs rejoignent (ou créent s'ils sont seuls) un groupe de consommateurs à partager. Deux consommateurs du même groupe ne recevront jamais le même message.
3 - Chaque groupe de consommateurs a-t-il une partition correspondante sur le courtier ou chaque consommateur en a-t-il une?
Ni. Un ensemble de partitions est attribué à tous les consommateurs d'un groupe de consommateurs, sous deux conditions: aucun client du même groupe n'a de partition en commun - et le groupe de consommateurs dans son ensemble se voit attribuer toutes les partitions existantes.
4 - Les partitions sont-elles créées par le courtier, donc pas une préoccupation pour les consommateurs?
Ce n’est pas le cas, mais vous voyez sur 3 qu’il est totalement inutile d’avoir plus de consommateurs que de partitions existantes, c’est donc votre niveau maximal de parallélisme pour consommer.
5 - Puisqu'il s'agit d'une file d'attente avec un décalage pour chaque partition, le consommateur est-il responsable de spécifier les messages qu'il veut lire? A-t-il besoin de sauver son état?
Oui, les consommateurs économisent un décalage par sujet et par partition. Ceci est totalement géré par Kafka, ne vous inquiétez pas.
6 - Que se passe-t-il lorsqu'un message est supprimé de la file d'attente? - Par exemple: la rétention a duré 3 heures, puis le temps a passé, comment le décalage est-il traité des deux côtés?
Si un consommateur demande un décalage non disponible pour une partition sur les courtiers (par exemple, en raison d'une suppression), il entre en mode erreur et se réinitialise finalement pour le message le plus récent ou le plus ancien disponible (selon la valeur de configuration auto.offset.reset) et continuez à travailler.
Kafka utilise Sujet 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é sur plusieurs courtiers.
Les partitions sont des séquences ordonnées et immuables de messages qui sont continuellement ajoutées, à savoir un journal de validation.
Les messages de la partition ont un numéro d'identification séquentiel qui identifie de manière unique chaque message de la partition.
Les partitions permettent au journal d’un sujet de s’étendre au-delà d’une taille qui tient sur un seul serveur (un courtier) et qui constitue l’unité du parallélisme.
Les partitions d'un sujet sont réparties sur les courtiers du cluster Kafka, où chaque courtier gère les données et les demandes de partage des partitions.
Chaque partition est répliquée 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/