데이터 싱크 작업중 Elastic Search에서 Timeout 에러가 발생했다.
2023-01-05 19:33:55:27631 [http-nio-8080-exec-1] ERROR [c.f.m.a.e.h.CustomExceptionHandler] Caught unexpected exception
org.springframework.dao.DataAccessResourceFailureException: 5,000 milliseconds timeout on connection http-outgoing-0 [ACTIVE]; nested exception is java.lang.RuntimeException: 5,000 milliseconds timeout on connection http-outgoing-0 [ACTIVE]
어떤 테이블에서는 발생하고, 어떤 테이블에서는 발생하지 않았다. 아마도 테이블의 컬럼이 많아서 DB데이터를 ES로 옮겨올 때 시간이 오래 걸려 해당 문제가 생긴것으로 보였다.
정확히 어디 위치에서 해당 오류가 발생하는지 디버깅이 잘 되지 않아 사수님께 도움을 요청하였고 아래와 같이 해결되었다.
Elastic Search의 Config 설정에서 원인이 발생했고 RestHighLevelClient를 통해 Client를 생성하는데, 이 안에 ClientConfiguration.builder()에 socketTimeout이 5초, connectionTimeout이 10초로 저장되어 있었다.
문제발생 위치
에러 해결을 위해 해당 초를 늘려주기만 하면 되지만 라이브러리 소스를 수정했다가 나중에 어떤 문제가 생기면 파악이 쉽지 않을 수 있다.
그래서 ES Client 생성 후 Configuration connectTimeout, socketTimeout 옵션을 다시 설정하는 방법을 통해 해결하였다.