Ce qui détermine Kafka à la consommation de décalage?
Je suis relativement nouvelle de Kafka. J'ai fait un peu d'expérimenter avec elle, mais quelques choses ne sont pas claires pour moi au sujet de la consommation de l'offset. De ce que j'ai entendu jusqu'à présent, lorsqu'un consommateur commence, le décalage, il va commencer la lecture est déterminé par le paramètre de configuration auto.offset.reset
(corrigez-moi si je me trompe).
Maintenant dire par exemple qu'il y a 10 messages (décalages de 0 à 9) dans le sujet, et un consommateur qui s'est passé à consommer 5 d'entre eux avant il est allé vers le bas (ou avant j'ai tué le consommateur). Puis dire que j'ai redémarrer le processus de consommation. Mes questions sont les suivantes:
-
Si le
auto.offset.reset
est fixé àsmallest
, est toujours, il va commencer à consommer de l'offset 0 ? -
Si le
auto.offset.reset
est fixé àlargest
, est-ce que ça va commencer à consommer de décalage de 5 ? -
Est le comportement à l'égard de ce genre de scénario toujours déterministe ?
S'il vous plaît n'hésitez pas à commenter si quelque chose dans ma question n'est pas claire. Merci à l'avance.
Vous devez vous connecter pour publier un commentaire.
C'est un peu plus complexe que ce que vous avez décrit. Le
auto.offset.reset
config coups de pied dans le SEUL cas où votre groupe de consommateurs n'est pas valide décalage commis quelque part (2 pris en charge décalage de stockages sont maintenant Kafka et la Gardienne). Et cela dépend aussi de quel genre de consommateur que vous utilisez.Si vous utilisez un haut niveau de java consommateur, alors imaginer des scénarios suivants:
Vous avez un consommateur dans un groupe de consommateurs
group1
qui a consommé 5 messages et de la mort. La prochaine fois que vous démarrez ce consommateur, il n'a même pas de l'utilisation queauto.offset.reset
config et continue à partir de l'endroit où il est mort parce qu'il vient de récupérer la stockées décalage à partir de l'offset de stockage (Kafka ou ZK comme je l'ai mentionné).Vous avez des messages dans un sujet (comme vous l'avez décrit) et vous commencez à un consommateur dans un nouveau groupe de consommateurs
group2
. Il n'y a pas de décalage stockées n'importe où et à ce moment l'auto.offset.reset
config va décider de démarrer à partir du début de la rubrique (smallest
) ou à partir de la fin de la rubrique (largest
)Une chose de plus que ce qui affecte la valeur de décalage correspond à
smallest
etlargest
configs est le journal de stratégie de rétention. Imaginez que vous avez un sujet à la rétention configuré à 1 heure. Vous produisez de 5 messages, et puis une heure plus tard vous poster 5 messages. Lelargest
décalage restera toujours le même que dans l'exemple précédent, mais lasmallest
on ne sera pas en mesure d'être0
parce que Kafka déjà de supprimer ces messages et donc le plus petit décalage sera5
.Tout ce qui est mentionné ci-dessus n'est pas liée à
SimpleConsumer
et à chaque fois que vous l'exécutez, il va décider de l'endroit où commencer à partir de l'aide de l'auto.offset.reset
config.auto.offset.reset
n'ont pas de signification par la suite? La seule signification de ce paramètre est quand il n'y a rien commis (et, idéalement, ce serait lors de la première start-up de la consommation) ?auto.offset.reset
et continuez à partir de l'engagement de l'offset. Si vous utilisez toujours des différents groupe de consommateurs (comme le générer lors du démarrage de la consommation), le client respectera toujoursauto.offset.reset
assign()
méthode de la consommation et a précisé qu'un invalide de décalage.Juste une mise à jour: De Kafka à 0,9-et-vient, Kafka est à l'aide d'une nouvelle version de Java de la consommation et de l'automobile.décalage.réinitialiser les noms de paramètres ont changé; à Partir de la notice:
J'ai passé un peu de temps pour trouver ce qu'après vérification de la accepté de répondre, j'ai donc pensé qu'il pourrait être utile pour la communauté de la publier.
De plus, il y a des décalages.la rétention.minutes. Si le temps écoulé depuis le dernier commit >
offsets.retention.minutes
, puisauto.offset.reset
aussi des coups de pied dansProlong 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>Après un groupe de consommateurs qui perd tous ses consommateurs (c'est à dire devient vide) ses décalages seront conservés pour cette période de rétention avant d'obtenir écarté.</b> autonome, Pour les consommateurs (à l'aide de l'attribution manuelle), les compensations seront expirés après l'heure du dernier commit de plus, cette période de rétention. (C'est pourKafka 2.3
)