Flink から Amazon Kinesis Data Streams にデータを書き込むときに、タイムアウトまたは例外エラーが発生します。
簡単な説明
FlinkKinesisProducer を使用する Flink アプリケーションから、以下のいずれかのエラーメッセージが発生することがあります。
「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」
Flink アプリケーションが実行されている環境におけるネットワークの問題やシステムリソースの不足が、このようなタイムアウトエラーの原因となる可能性があります。
解決策
Kinesis Data Streams サービスエンドポイントに接続できない
Flink アプリケーションが 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」
このエラーが繰り返し発生する場合は、ネットワーク設定に問題がある可能性があります。
この問題を解決するには、次のステップを実行してください。
- Flink アプリケーションがインターネットに接続できることを確認します。
- Flink アプリケーションが仮想プライベートクラウド (VPC) の AWS リソースで実行されている場合は、次の VPC 機能が正しく設定されていることを確認します。
ルートテーブル
セキュリティグループ
ネットワークアクセスコントロールリスト (ネットワーク ACL)
- (オプション) Data Streams の VPC エンドポイントを使用して VPC 内で通信します。
送信されたリクエストに対するレスポンスが、設定されたタイムアウト期間内に返されませんでした
Curl 28 エラーは、送信されたリクエストに対するレスポンスが設定されたタイムアウト期間内に返されなかったためにタイムアウトエラーが発生したことを示します。エラーは次のようになる場合があります。
「[AWS Log: ERROR](CurlHttpClient)Curl returned error code 28」
タイムアウトは、一時的なネットワークの問題が原因で発生することがあります。または、レコードが Kinesis Producer Library (KPL) デーモンへ送信される Data Streams への保留中のリクエストが多すぎるために、タイムアウトになることもあります。レコードが KPL に送信されるのは、FlinkKinesisProducer が KPL を使用して Flink ストリームから Amazon Kinesis ストリームにデータを送信するためです。
この問題を解決するには、FlinkKinesisProducer オブジェクトの Request timeout period を長くしてください。
Request timeout period: producerConfig.put ("RequestTimeout", "\*\*\*\*"); I
また、setQueueLimit パラメーターと RecordTtl パラメーターを更新して、データが損失を回避することもベストプラクティスです。
Internal Queue Size: FlinkKinesisProducer #setQueueLimit (queueLimit)
time-to-live on records: producerConfig.put("RecordTtl", "*****");
setQueueLimit の値の計算に関する詳細については、Flink ウェブサイトの「Monitoring back pressure」を参照してください。