web-dev-qa-db-fra.com

Kafka10.1 heartbeat.interval.ms, session.timeout.ms et max.poll.interval.ms

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

21
user1578872

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 traitement
heartbeat.interval.ms: une valeur relativement faible, mieux 1/3 de la session.timeout.ms

29
amethystic

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".

1
suiyuan2009