2017-12-19 18 views
0

Flink 스트림 작업에서 RichFlatmapFunction을 확장하는 클래스가 있습니다. open() 메서드에서 Jedis 인스턴스를 만들고 (jedis.close()) 메서드를 close()으로 닫아서 변환을 통과하는 모든 레코드가 동일한 Jedis 인스턴스를 사용하도록합니다. 이 접근법은 전에 연결 오류를주지 못했습니다. " java.net.SocketException의 : 연결 재설정 redis.clients.jedis.exceptions.JedisConnectionException"그러나 최근 작업 실행에, 나는 오류,Flickink에서 재설정 연결 재설정

을 얻었다.

모든 레코드에 대해 동일한 jedis 인스턴스 (열려있는 상태로 유지됨)를 사용하고 있기 때문일 수 있습니까? 인스턴스를 만드는 동안 시간 제한을 설정하지 않았습니다. 따라서 타임 아웃은 기본값이기도합니다.

각 레코드에 대해 Jedis 인스턴스를 검색하고 닫으려면 JedisPool을 사용하면이 오류를 피할 수 있습니까? 어떤 네트워크가 손실 방화벽 또는 응용 프로그램 충돌이나 또한 때문에 대기 시간 초과의 가까운 구성의 가능성이 가까운

의도, 즉 서버와 네트워크 수준에서 클라이언트 연결 사이에 혼란이있는 곳

+0

도움이된다면 답변을 upvote하십시오. –

답변

1

연결 리셋이 발생 .

이제 JedisPool을 사용하여 연결 풀을 사용하는 것이 재사용 연결이 효율적이기 때문에 다중 스레드 환경에서 가장 좋은 방법입니다. 따라서 적절한 구성으로 사용하려고하십시오.

+0

"기본적으로 최근 버전의 Redis는 클라이언트가 수 초 동안 유휴 상태 인 경우 클라이언트와의 연결을 닫지 않습니다. 연결은 열린 상태로 유지됩니다 영원히". 이것은 Redis의 설명서에 언급되어 있으며 Redis의 최신 버전을 사용하고 있습니다. 우리는 설정에서도 'idle timeout'을 설정하지 않았습니다. 따라서이 문제는 '네트워크 수준에서 서버와 클라이언트의 연결이 끊어 지거나 네트워크 손실, 방화벽 또는 응용 프로그램 충돌이 발생합니다.'때문에 발생할 수 있습니다. – avidlearner

+0

@avidlearner 예 TCP RST 입력이 트리거되어야합니다. –

+0

@avidlearner : 도움이된다면 대답을 표시하십시오. –