Comment résoudre les erreurs d’expiration de délai lors du transfert de données de Flink vers Kinesis Data Streams ?

Dernière mise à jour : 06/05/2020

J'essaie de transférer des données de Flink vers Amazon Kinesis Data Streams, mais je reçois un message d’erreur ou de délai expiré. Pourquoi cela se produit-il et comment résoudre ce type d’erreur ?

Brève description

Les applications Flink utilisant FlinkKinesisProducer peuvent générer l'un des messages d'erreur suivants :

Caused by: org.apache.flink.kinesis.shaded.org.apache.http.conn.ConnectTimeoutException: Connect to kinesis.us-east-1.amazonaws.com:443 [kinesis.us-east-1.amazonaws.com/xxx.xxx.xxxx.xxx] failed: connect timed out
[AWS Log: ERROR](CurlHttpClient)Curl returned error code 28

Ces deux erreurs d’expiration de délai sont dues à des problèmes de réseau et à un manque de ressources système dans l'environnement d’exécution de l'application Flink.

Solution

Impossible de se connecter au point de terminaison du service Kinesis Data Streams

L'erreur suivante se produit lorsque l'application Flink ne parvient pas à se connecter au point de terminaison du service Data Streams :

Caused by: org.apache.flink.kinesis.shaded.org.apache.http.conn.ConnectTimeoutException: Connect to kinesis.us-east-1.amazonaws.com: 443 [ kinesis.us-east-1.amazonaws.com/xxx.xxxx.xxx] failed:connect timed out

Si cette erreur se produit à plusieurs reprises, cela peut indiquer un problème avec votre configuration réseau.

Pour résoudre ce problème, effectuez les opérations suivantes :

1.    Vérifiez que l'application Flink peut se connecter à Internet.

2.    Si votre application Flink s'exécute sur des ressources AWS dans un VPC ou Virtual Private Cloud (Cloud privé virtuel), vérifiez que les fonctions VPC suivantes sont bien configurées :
       Table de routage
       Groupes de sécurité
       Listes de contrôle d'accès réseau

3.    (Facultatif) Vous pouvez également utiliser le point de terminaison VPC du flux de données pour communiquer au sein de votre VPC.

La réponse à la requête n'a pas été renvoyée dans le délai configuré

L'erreur Curl 28 suivante indique que la réponse à la requête n'a pas été renvoyée dans le délai configuré. Par conséquent, le délai d’attente a expiré :

[AWS Log: ERROR](CurlHttpClient)Curl returned error code 28

Ce délai d’attente est dû à un problème de réseau temporaire. Il peut également avoir été causé par un trop grand nombre de requêtes en attente sur Data Streams, qui transfère des enregistrements au daemon Kinesis Producer Library (KPL). Les enregistrements sont envoyés au KPL, car FlinkKinesisProducer utilise KPL pour envoyer les données d'un flux Flink vers un flux Amazon Kinesis.

Pour résoudre ce problème, modifiez le paramètre de configuration suivant de l'objet FlinkKinesisProducer :

Request timeout period: producerConfig.put (“RequestTimeout”, “****”); I
  • Taille de file d'attente interne : FlinkKinesisProducer #setQueueLimit (queueLimit)

Il est également recommandé de mettre à jour les paramètres suivants afin d'éviter la perte de données :

Internal Queue Size: FlinkKinesisProducer #setQueueLimit (queueLimit)
time-to-live on records: producerConfig.put("RecordTtl", "*****");

Pour plus d’informations sur le calcul de la valeur de setQueueLimit, consultez Backpressure sur le site Web Apache.


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?