J'utilise kafka 0.10.1.1 et confondu avec les 3 propriétés suivantes.
heartbeat.interval.ms
session.timeout.ms
max.poll.interval.ms
heartbeat.interval.ms - Ceci a été ajouté en 0.10.1 et il enverra des pulsations entre les sondages. session.timeout.ms - C'est pour commencer le rééquilibrage si aucune demande à kafka et il est réinitialisé à chaque sondage. max.poll.interval. ms - C'est à travers le sondage.
Mais, quand kafka commence le rééquilibrage? Pourquoi avons-nous besoin de ces 3? Quelles sont les valeurs par défaut pour chacun d'eux?
Merci
En supposant que nous parlons de Kafka 0.10.1.0 ou plus où chaque instance de consommateur utilise deux threads pour fonctionner. L'un est le thread utilisateur à partir duquel poll
est appelé; l'autre est le thread de pulsation qui s'occupe spécialement des choses du rythme cardiaque.
session.timeout.ms
est pour le fil de pulsation. Si le coordinateur ne parvient pas à obtenir le rythme cardiaque d'un consommateur avant que cet intervalle de temps ne se soit écoulé, il marque le consommateur comme ayant échoué et déclenche un nouveau cycle de rééquilibrage.
max.poll.interval.ms
est pour le thread utilisateur. Si la logique de traitement des messages est trop lourde pour coûter plus cher que cet intervalle de temps, le coordinateur demande explicitement au consommateur de quitter le groupe et déclenche également un nouveau cycle de rééquilibrage.
heartbeat.interval.ms
est utilisé pour que les autres consommateurs sains soient informés plus rapidement du rééquilibrage. Si le coordinateur déclenche un rééquilibrage, les autres consommateurs ne le sauront qu'en recevant la réponse de pulsation avec REBALANCE_IN_PROGRESS
exception encapsulée. Plus la demande de pulsation est envoyée rapidement, plus le consommateur sait qu'il a besoin de rejoindre le groupe.
Valeurs suggérées:session.timeout.ms
: une valeur relativement faible, 10 secondes par exemple.max.poll.interval.ms
: en fonction de vos exigences de traitementheartbeat.interval.ms
: une valeur relativement faible, mieux 1/3 de la session.timeout.ms
clarifiez-les simplement, un thread de pulsation (avec le thread utilisateur qui appelle la fonction Poll
dans le même processus) enverra une pulsation au coordinateur à chaque fois que "heartbeat.interval.ms" sera activé, et le coordinateur marquera le consommateur dans le thread utilisateur comme mort s'il dépasse "session.timeout.ms" ou "max.poll.interval.ms".