생계유지형 개발자/Elasticsearch 3

[Elasticsearch] java api client 버전 6.0에서 6.8로 업그레이드

현재 기준으로 공식 엘라스틱서치 최신 안정화 버전은 7.9 버전이다. 현재 운영중인 서비스는 엘라스틱서치 6.0 버전을 설치하였으며, 스프링부트를 기반으로 개발된 서비스에서 자바 클라이언트를 사용하여 설치된 엘라스틱서치에 연결한다. 자바 클라이언트 버전은 6.0.0 이다. 설치된 엘라스틱서치의 노드들을 6.8 -> 7.9 버전으로 업그레이드(진행 중) 하면서 6.0.0 버전의 자바 클라이언트를 사용할 수 없게 되었다. 자바 클라이언트 버전을 6.0.0 -> 7.9로 일괄 업그레이드 하면 좋겠지만 모든 노드들을 전환하는데 시간이 걸리기 때문에 6.8 버전과 7.9 버전을 호환할 수 있는 6.8 버전으로 클라이언트를 변경하기로 했다. 또한 기존의 6.0 버전 자바 클라이언트는 Java API 였다면 이번에는..

[Elasticsearch in java] client는 언제 close해 주어야 할까?

Java로 Elasticsearch에 접근로그 데이터를 저장 및 검색하는 기능을 개발했다. 사용자 유입이 많은 서비스라 하루에도 150만 건 정도의 접근로그가 저장되고 있었다. Elasticsearch에 연동하기 위해 두 개의 TransportClient 타입의 Client 객체를 생성했다. 하나는 접근로그 저장을 위한 clientForWrite, 또 하나는 검색을 위한 clientForSearch이다. 여기서 의문이 생겼다. Client는 언제 생성하고, 언제 닫아주어야 할까? 사용 빈도가 크지 않은 반면 JVM을 비롯한 리소스 관리가 필요한 상황이라면 작업이 필요할 때만 client를 생성하고 작업이 끝나면 닫아주면(close() 메소드 호출) 되겠지만, 접근로그 데이터가 거의 실시간으로 발생하기 때..

[Elasticsearch] 데이터 대량 검색 (2) - Scroll vs Search After

엘라스틱서치로 대량의 데이터 검색하기 위한 방법으로 두 가지가 있다. 하나는 Scroll을 이용한 방법이고 두 번째는 Search After를 이용한 방법이다. 둘 다 대량의 데이터를 검색하기 위한 방법이지만, 동작 방식이 다르므로 목적과 상황에 따라 달리 사용하기를 권장하고 있다. Scroll While a search request returns a single “page” of results, the scroll API can be used to retrieve large numbers of results (or even all results) from a single search request, in much the same way as you would use a cursor on a tradi..