web-dev-qa-db-fra.com

Kafka Producteur TimeOutException

J'exécute un travail de flux Samza qui écrit des données dans Kafka topic. Kafka exécute un cluster à 3 nœuds). Samza est déployé sur le fil. Nous voyons beaucoup de ces exceptions dans les journaux de conteneur:

 INFO [2018-10-16 11:14:19,410] [U:2,151,F:455,T:2,606,M:2,658] samza.container.ContainerHeartbeatMonitor:[ContainerHeartbeatMonitor:stop:61] - [main] - Stopping ContainerHeartbeatMonitor
ERROR [2018-10-16 11:14:19,410] [U:2,151,F:455,T:2,606,M:2,658] samza.runtime.LocalContainerRunner:[LocalContainerRunner:run:107] - [main] - Container stopped with Exception. Exiting process now.
org.Apache.samza.SamzaException: org.Apache.samza.SamzaException: Unable to send message from TaskName-Partition 15 to system kafka.
        at org.Apache.samza.task.AsyncRunLoop.run(AsyncRunLoop.Java:147)
        at org.Apache.samza.container.SamzaContainer.run(SamzaContainer.scala:694)
        at org.Apache.samza.runtime.LocalContainerRunner.run(LocalContainerRunner.Java:104)
        at org.Apache.samza.runtime.LocalContainerRunner.main(LocalContainerRunner.Java:149)
Caused by: org.Apache.samza.SamzaException: Unable to send message from TaskName-Partition 15 to system kafka.
        at org.Apache.samza.system.kafka.KafkaSystemProducer$$anon$1.onCompletion(KafkaSystemProducer.scala:181)
        at org.Apache.kafka.clients.producer.internals.RecordBatch.done(RecordBatch.Java:109)
        at org.Apache.kafka.clients.producer.internals.RecordBatch.maybeExpire(RecordBatch.Java:160)
        at org.Apache.kafka.clients.producer.internals.RecordAccumulator.abortExpiredBatches(RecordAccumulator.Java:245)
        at org.Apache.kafka.clients.producer.internals.Sender.run(Sender.Java:212)
        at org.Apache.kafka.clients.producer.internals.Sender.run(Sender.Java:135)
        at Java.lang.Thread.run(Thread.Java:748)
Caused by: org.Apache.kafka.common.errors.TimeoutException: Expiring 5 record(s) for Topic3-16 due to 30332 ms has passed since last attempt plus backoff time

Ces 3 types d'exceptions arrivent beaucoup.

59088 org.Apache.kafka.common.errors.TimeoutException: Expiring 115 record(s) for Topic3-1 due to 30028 ms has passed since last attempt plus backoff time

61015 org.Apache.kafka.common.errors.TimeoutException: Expiring 60 record(s) for Topic3-1 due to 74949 ms has passed since batch creation plus linger time

62275 org.Apache.kafka.common.errors.TimeoutException: Expiring 176 record(s) for Topic3-4 due to 74917 ms has passed since last append

Veuillez m'aider à comprendre quel est le problème ici. Chaque fois que cela s'est produit Samza est redémarré.

4
Anuj jain

L'erreur indique que certains enregistrements sont placés dans la file d'attente à un rythme plus rapide qu'ils ne peuvent être envoyés par le client.

Lorsque votre producteur envoie des messages, ils sont stockés dans un tampon (avant d'envoyer au courtier cible) et les enregistrements sont regroupés en lots afin d'augmenter le débit. Lorsqu'un nouvel enregistrement est ajouté au lot, il doit être envoyé dans une fenêtre de temps -configurable- qui est contrôlée par request.timeout.ms (la valeur par défaut est définie sur 30 secondes). Si le lot est dans la file d'attente pendant plus longtemps, un TimeoutException est jeté et les enregistrements de lot seront ensuite supprimés de la file d'attente et ne seront pas remis au courtier.

Augmenter la valeur de request.timeout.ms devrait faire l'affaire pour vous.

Si cela ne fonctionne pas, vous pouvez également essayer de réduire batch.size pour que les lots soient envoyés plus souvent (mais cette fois comprendra moins de messages) et assurez-vous que linger.ms est défini sur 0 (qui est la valeur par défaut).

Notez que vous devez redémarrer vos courtiers kafka après avoir modifié un paramètre de configuration.

Si vous obtenez toujours l'erreur, je suppose que quelque chose ne va pas avec votre réseau. Avez-vous activé SSL?

5