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.
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.
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.
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.
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é.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.
É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.
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>
Auto-Commit convient si votre application:
Sinon, un engagement manuel est recommandé.
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.
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.
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!