web-dev-qa-db-fra.com

max.poll.intervals.ms défini sur int.Max par défaut

Apache Kafka indique:

La valeur par défaut interne Kafka Streams consumer max.poll.interval.ms est passée de 300000 à Integer.MAX_VALUE

Puisque cette valeur est utilisée pour détecter quand le temps de traitement d'un lot d'enregistrements dépasse un seuil donné, y a-t-il une raison pour une telle valeur "illimitée"?

Cela permet-il aux applications de ne plus répondre? Ou Kafka Streams a une manière différente de quitter le groupe de consommateurs lorsque le traitement prend trop de temps?

6
Javier Holguera

Cela permet-il aux applications de ne plus répondre? Ou Kafka Streams a une manière différente de quitter le groupe de consommateurs lorsque le traitement prend trop de temps?

Kafka Streams exploite une fonctionnalité de pulsation du client consommateur Kafka dans ce contexte, et dissocie donc les pulsations ("Cette instance d'application est-elle toujours en vie?") Des appels à poll(). Les deux paramètres principaux sont session.timeout.ms (pour le fil de pulsation) et max.poll.interval.ms (pour le thread de traitement), et leur différence est décrite plus en détail sur https://stackoverflow.com/a/39759329/174358 .

Le battement de cœur a été introduit afin qu'une instance d'application puisse être autorisée à passer beaucoup de temps à traiter un enregistrement sans être considérée comme "ne progressant pas" et donc "être morte". Par exemple, votre application peut effectuer beaucoup de tests pour un seul enregistrement pendant une minute, tout en battant à Kafka "Hey, je suis toujours en vie, et je suis en train de progresser. Mais je n'ai tout simplement pas encore fini le traitement. Restez à l'écoute. "

Bien sûr, vous pouvez changer max.poll.interval.ms par défaut (Integer.MAX_VALUE) à un paramètre inférieur si, par exemple, vous voulez réellement que votre instance d'application soit considérée comme "morte" si cela prend plus de X secondes entre les enregistrements d'interrogation, et donc si cela prend plus de X secondes pour traiter le dernière série de records. Cela dépend de votre cas d'utilisation spécifique, que cette configuration soit logique ou non - dans la plupart des cas, le paramètre par défaut est une valeur sûre.

session.timeout.ms: Délai d'expiration utilisé pour détecter les défaillances des consommateurs lors de l'utilisation de la fonction de gestion de groupe de Kafka. Le consommateur envoie des battements de cœur périodiques pour indiquer sa vivacité au courtier. Si aucun battement de cœur n'est reçu par le courtier avant l'expiration de ce délai d'expiration de session, le courtier supprimera ce consommateur du groupe et initiera un rééquilibrage. Notez que la valeur doit être dans la plage autorisée telle que configurée dans la configuration du courtier par group.min.session.timeout.ms et group.max.session.timeout.ms.

max.poll.interval.ms: Le délai maximum entre les invocations de poll () lors de l'utilisation de la gestion des groupes de consommateurs. Cela place une limite supérieure sur la durée pendant laquelle le consommateur peut être inactif avant de récupérer plus d'enregistrements. Si poll () n'est pas appelé avant l'expiration de ce délai, le consommateur est considéré comme ayant échoué et le groupe se rééquilibrera afin de réaffecter les partitions à un autre membre.

11
Michael G. Noll