web-dev-qa-db-fra.com

Comment fonctionne kafka commit automatique du consommateur?

Je lis celui-ci :

Validation automatique La façon la plus simple de valider des compensations est de permettre au consommateur de le faire pour vous. Si vous configurez enable.auto.commit = true, toutes les cinq secondes, le consommateur valide le plus grand décalage reçu par poll () par votre client. L'intervalle de cinq secondes est la valeur par défaut et est contrôlé en définissant auto.commit.interval.ms. Comme tout le reste du consommateur, les validations automatiques sont pilotées par la boucle d'interrogation. Chaque fois que vous interrogez, le consommateur vérifie s'il est temps de valider, et si c'est le cas, il valide les décalages qu'il a retournés lors du dernier sondage.

Peut-être que mon anglais n'est pas bon mais je n'ai pas bien compris cette description.

Supposons que j'utilise la validation automatique avec un intervalle par défaut - 5 secondes et l'interrogation a lieu toutes les 7 secondes. Dans ce cas, une validation aura lieu toutes les 5 secondes ou toutes les 7 secondes?

Pouvez-vous clarifier le comportement si le sondage a lieu toutes les 3 secondes? La validation se produira-t-elle toutes les 5 secondes ou toutes les 6 secondes?
J'ai lu celui-ci :

Validation automatique: vous pouvez définir auto.commit sur true et définir la propriété auto.commit.interval.ms avec une valeur en millisecondes. Une fois que vous l'avez activé, le consommateur Kafka valide le décalage du dernier message reçu en réponse à son appel poll (). L'appel poll () est émis en arrière-plan sur l'ensemble auto.commit.interval.ms.

Et cela contredit la réponse.

Pouvez-vous expliquer ces choses en détail.

disons que j'ai un diagramme comme celui-ci:

0 sec - sondage
4 sec - sondage
8 sec - sondage

Quand la compensation sera-t-elle engagée et quand laquelle?

14
gstackoverflow

La vérification de validation automatique est appelée dans chaque sondage et vérifie que le temps écoulé est supérieur au temps configuré. Si c'est le cas, le décalage est validé.

Dans le cas où l'intervalle de validation est de 5 secondes et l'interrogation a lieu dans 7 secondes, la validation ne se produit qu'après 7 secondes.

10
Liju John

Il essaierait de valider automatiquement dès que le sondage est terminé. Vous pouvez consulter le code source du coordinateur de consommateurs, qui a un ensemble de champs locaux définis au niveau de la classe pour comprendre si la validation automatique est activée, quel est l'intervalle et quelle est la prochaine échéance pour effectuer la validation automatique.

https://github.com/Apache/kafka/blob/10cd98cc894b88c5d1e24fc54c66361ad9914df2/clients/src/main/Java/org/Apache/kafka/clients/consumer/internals/ConsumerCoordinator.Java#L625

Et l'un des endroits dans le sondage qui effectue un appel pour faire du stockage https://github.com/Apache/kafka/blob/10cd98cc894b88c5d1e24fc54c66361ad9914df2/clients/src/main/Java/org/Apache/kafka/clients/ consumer/internals/ConsumerCoordinator.Java # L279

Cela étant dit, par exemple, le sondage est exécuté toutes les 7 secondes et la validation automatique est définie sur 5:

0 - sondage, + fixer la date limite à la 5e seconde

7 - sondage + validation en raison de la date limite, mise à jour du délai à 7 + 5 = 12

14 - sondage + validation en raison de la date limite, date limite de mise à jour à 12 + 5 = 17

Cependant, si l'interrogation est définie sur toutes les 3 secondes et que la validation automatique est définie sur 5:

0 - sondage, + fixer la date limite à la 5e seconde

3 - sondage, pas de validation

6 - sondage + validation en raison de la date limite, mise à jour du délai à 6 + 5 = 11

5
zubrabubra