Lorsque j'écris des données depuis Flink vers Amazon Kinesis Data Streams, je reçois un message d'erreur ou de délai expiré.
Brève description
Les applications Flink qui utilisent 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 »
-ou-
« [AWS Log: ERROR](CurlHttpClient)Curl returned error code 28 »
Des problèmes de réseau et un manque de ressources système dans l'environnement dans lequel s'exécute l'application Flink peuvent provoquer ces erreurs d’expiration de délai.
Résolution
Impossible de se connecter au point de terminaison du service Kinesis Data Streams
Lorsque l'application Flink ne parvient pas à se connecter au point de terminaison du service Data Streams, vous recevez une erreur similaire à la suivante :
« 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, il se peut qu'il y ait un problème avec la configuration de votre réseau.
Pour résoudre ce problème, procédez comme suit :
- Vérifiez que l'application Flink peut se connecter à Internet.
- Si votre application Flink s'exécute sur les ressources AWS d'un cloud privé virtuel (VPC), vérifiez que les fonctionnalités VPC suivantes sont correctement configurées :
Table de routage
Groupes de sécurité
Listes de contrôle d’accès au réseau (ACL réseau)
- (Facultatif) Utilisez le point de terminaison VPC de Data Streams pour communiquer au sein de votre VPC.
La réponse à la requête soumise n'a pas été renvoyée dans le délai configuré
L’erreur Curl 28 indique que la réponse à la requête soumise n'a pas été renvoyée dans le délai configuré, ce qui a provoqué une erreur d’expiration de délai. La sortie devrait ressembler à ce qui suit :
« [AWS Log: ERROR](CurlHttpClient)Curl returned error code 28 »
L’expiration de délai peut être dû à un problème réseau temporaire. L’expiration de délai peut également être dû à un trop grand nombre de requêtes en attente adressées à Data Streams où les enregistrements sont envoyés au démon Kinesis Producer Library (KPL). Les enregistrements sont envoyés au KPL car FlinkKinesisProducer utilise le KPL pour envoyer des données d'un flux Flink vers un flux Amazon Kinesis.
Pour résoudre ce problème, augmentez le délai d'expiration de la requête de l'objet FlinkKinesisProducer :
Request timeout period: producerConfig.put ("RequestTimeout", "\*\*\*\*"); I
Il est également recommandé de mettre à jour les paramètres SetQueueLimit et RecordTtl afin d'éviter toute 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 la section Monitoring back pressure sur le site Web de Flink.