2017-12-19 9 views
0

FlinkストリームジョブでRichFlatmapFunctionを拡張するクラスがあります。 open()メソッドでJedisインスタンスを作成し、(jedis.close())メソッドをclose()に閉じて、変換を通過するすべてのレコードが同じJedisインスタンスを使用するようにします。この方法では以前に接続エラーが発生していませんでした。 ": java.net.SocketExceptionが:接続がリセットさredis.clients.jedis.exceptions.JedisConnectionException" しかし、最近のジョブ実行中に、私はエラー、Flickでのリセットのリセット

を得ました。

私はすべてのレコードに対して同じjedisインスタンス(開いたままの状態)を使用している可能性がありますか?私はインスタンスを作成中にタイムアウトを設定していません。したがって、タイムアウトもデフォルト値です。

JedisPoolを使用して各レコードのJedisインスタンスを取得して閉じる場合、このエラーを回避できますか。ネットワークレベルでサーバとクライアント間の接続に中断がある場合

+0

もし役に立ちたら答えをアップしてください –

答えて

1

接続のリセットは、すべてのネットワーク、ファイアウォールやアプリケーションのクラッシュを紛失したり、近く

を目的とする。すなわちまた、アイドルタイムアウトのために近いことを意図している可能性がある起こります。

JedisPoolを使用するようになりました。再利用接続が効率的であるため、マルチスレッド環境では接続プールを使用することがベストプラクティスです。だから適切な設定でそれらを使ってみてください

+0

"デフォルトでは、最近のバージョンのRedisは、クライアントが数秒間アイドル状態の場合、クライアントとの接続を終了しません。永遠に "。これはRedisのドキュメントに記載されており、Redisの最新バージョンを使用しています。設定でアイドルタイムアウトを設定していません。したがって、この問題は、ネットワークレベルでサーバーとクライアントの接続が途切れるなど、「ネットワークの紛失、ファイアウォールまたはアプリケーションのクラッシュ」が原因である可能性があります。 – avidlearner

+0

@avidlearnerはいTCP RST入力がトリガーされるケースである必要があります –

+0

@avidlearner:役立つ場合は答えをマークしてください –