Je suis relativement nouveau à Kafka. J'ai fait un peu d'expérimentation avec cela, mais certaines choses ne sont pas claires pour moi concernant la compensation des consommateurs. D'après ce que j'ai compris jusqu'à présent, lorsqu'un consommateur démarre, le décalage à partir duquel il commencera à lire est déterminé par le paramètre de configuration auto.offset.reset
(corrigez-moi si je me trompe).
Maintenant, disons par exemple qu'il y a 10 messages (décalages de 0 à 9) dans le sujet, et qu'un consommateur en a consommé 5 avant qu'il ne tombe en panne (ou avant que je ne tue le consommateur). Puis dites que je redémarre ce processus de consommation. Mes questions sont:
Si le
auto.offset.reset
est défini sursmallest
, va-t-il toujours commencer à consommer à partir de l'offset 0?Si le
auto.offset.reset
est défini surlargest
, va-t-il commencer à consommer à partir de l'offset 5?Le comportement vis-à-vis de ce type de scénario est-il toujours déterministe?
N'hésitez pas à commenter si quelque chose dans ma question n'est pas clair. Merci d'avance.
la source
auto.offset.reset
cela n'a plus de signification par la suite? La seule signification de ce paramètre est quand il n'y a rien d'engagement (et idéalement ce serait au premier démarrage du consommateur)?auto.offset.reset
et continuera à partir du décalage validé. Si vous utilisez toujours un groupe de consommateurs différent (comme le générer lors du démarrage du consommateur), le consommateur respectera toujoursauto.offset.reset
Juste une mise à jour: à partir de Kafka 0.9 et les suivants, Kafka utilise une nouvelle version Java du consommateur et les noms des paramètres auto.offset.reset ont changé; À partir du manuel:
J'ai passé du temps à le trouver après avoir vérifié la réponse acceptée, alors j'ai pensé qu'il pourrait être utile pour la communauté de l'afficher.
la source
De plus, il y a offsets.retention.minutes. Si le temps écoulé depuis le dernier commit est>
offsets.retention.minutes
, alorsauto.offset.reset
démarre égalementla source
Prolong default value of offsets.retention.minutes to be at least twice larger than log.retention.hours.
issues.apache.org/jira/browse/KAFKA-3806offsets.retention.minutes
: <b> Une fois qu'un groupe de consommateurs perd tous ses consommateurs (c'est-à-dire devient vide), ses compensations seront conservées pendant cette période de conservation avant d'être supprimées. </b> consommateurs (en utilisant l'affectation manuelle), les offsets expireront après l'heure du dernier commit plus cette période de rétention. (C'est pourKafka 2.3
)