Maison > Java > javaDidacticiel > Kafka Consumer - Commissation du groupe de consommateurs décalé

Kafka Consumer - Commissation du groupe de consommateurs décalé

DDD
Libérer: 2025-01-26 20:11:10
original
926 Les gens l'ont consulté

Comprendre les compensations du groupe de consommateurs Kafka : un guide complet

Ce guide explore les compensations des groupes de consommateurs Kafka, cruciales pour suivre la progression de la consommation des messages. Chaque groupe de consommateurs conserve un décalage pour chaque partition qu'il consomme, indiquant le dernier enregistrement traité. Cela garantit que les consommateurs reprennent depuis la bonne position après les redémarrages.

Que sont les compensations de groupe de consommateurs ?

Un décalage de groupe de consommateurs est un simple identifiant numérique qui suit la position d'un consommateur dans la partition d'un sujet Kafka. Chaque partition a un décalage séquentiel pour chaque enregistrement. Le groupe de consommateurs utilise ces compensations pour se rappeler où il s’est arrêté. Par exemple, un groupe de consommateurs lisant un sujet à deux partitions (P1 et P2) aura des décalages distincts pour chacun, représentant le dernier enregistrement lu dans P1 et P2 respectivement.

Kafka Consumer – Committing consumer group offset

Un exemple de décalage actuel (position) pour un groupe de consommateurs 1

Stockage offset : Kafka contre systèmes externes

Le stockage offset peut être géré de deux manières : au sein de Kafka lui-même ou dans un système externe (base de données ou fichier). Cet article se concentre sur le mécanisme de stockage offset interne de Kafka.

Stockage offset interne de Kafka

Kafka stocke les compensations dans un sujet interne spécial nommé __consumer_offsets. La bibliothèque client Kafka gère le stockage et la récupération décalés, permettant aux consommateurs de reprendre de manière transparente à partir de leur dernière position connue après un redémarrage.

Gestion des décalages manquants

Si aucun décalage n'est trouvé pour un consommateur, la configuration auto.offset.reset détermine le comportement du consommateur :

  • latest (par défaut) : Le consommateur commence à la fin du sujet, en ignorant les messages existants.
  • earliest : Le consommateur commence par le début du sujet, en traitant tous les messages disponibles.
  • none : Une exception est levée si aucun décalage n'est trouvé.

Commit automatique ou commit manuel

La validation automatique simplifie la gestion des compensations en validant périodiquement les compensations dans Kafka. Cela se produit automatiquement toutes les 5 secondes par défaut (contrôlé par enable.auto.commit). Bien que pratique, cela risque de perdre des données.

Inconvénients de la validation automatique

Étant donné que la validation automatique fonctionne dans un thread séparé, elle ne suit pas le traitement des enregistrements en cours. Si un consommateur interroge plusieurs enregistrements et effectue une validation automatique avant la fin du traitement, une perte de données peut survenir en cas d'échec.

Commit manuel : garantir l'intégrité des données

La validation manuelle offre un contrôle précis. En désactivant la validation automatique (enable.auto.commit=false), vous validez explicitement les compensations à l'aide de commitSync() ou commitAsync() après avoir traité avec succès les enregistrements. Cela évite la perte de données.

<code class="language-java">while (true) {
  records = consumer.poll(timeout);
  // process records
  consumer.commitSync(); // or consumer.commitAsync()
}</code>
Copier après la connexion

Quand utiliser automatiquement

Auto-Commit convient si votre application:

  • tolère le retraitement des données occasionnelles (opérations idempotents).
  • peut gérer la perte de quelques messages.

Sinon, un engagement manuel est recommandé.

Synchrones vs Commits asynchrones

MANUEL COMMISS propose des options synchrones (commitSync()) et asynchrones (commitAsync()). commitSync() bloque jusqu'à ce que l'engagement soit confirmé, assurant la persistance mais impactant les performances. commitAsync() est non bloquant mais nécessite de gérer les exceptions potentielles.

Conclusion

Les compensations de groupe de consommateurs sont fondamentales pour la consommation fiable de Kafka. Alors que le communication automatique simplifie les choses, Manual Commit fournit un plus grand contrôle et une sécurité des données. Le choix entre les validations synchrones et asynchrones dépend des besoins de votre application, de l'équilibrage des performances et de la fiabilité. Comprendre ces mécanismes est la clé pour construire des applications Kafka robustes et tolérantes robustes.

En savoir plus sur Kafka

Envisagez d'explorer un mini-cours Kafka gratuit disponible sur Coding Harbor.

Crédit photo: @KencheungPhoto

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal