본문 바로가기
Elasticsearch

데이터 스트림 (Data streams)

by 개발자건빵 2023. 3. 13.

데이터 스트림은 단일 리소스에서 다중 인덱스에 걸친 append-only 시계열 데이터에 대한 요청을 처리하게 해준다. 데이터 스트림은 로그, 이벤트, 메트릭 등과 같은 연속적으로 생성되는 데이터에 적합하다.

색인 및 검색 요청을 데이터 스트림에 직접적으로 할 수 있다. 그러면 해당 스트림의 데이터를 가지고 있는 뒷단의 인덱스에게 자동으로 라우팅을 해준다. ILM (Index Lifecycle Management)를 통해 뒷단 인덱스들을 자동으로 관리할 수 있다. 예를들어 ILM을 통해 오래된 뒷단 인덱스를 좀더 저렴한 장비로 옮기고 필요없는 인덱스를 삭제할 수 있다. ILM를 통해 데이터 증가로 인한 오버헤드와 비용을 절감할 수 있다.

뒷단 인덱스 (Backing indices)

데이터 스트림은 자동으로 생성된 하나 이상의 숨김 상태의 뒷단 인덱스들로 구성되어 있다.

데이터 스트림을 사용하려면 인덱스 템플릿에 매칭해야 한다. 이 템플릿에는 데이터 스트림의 뒷단 인덱스를 설정하는데 사용되는 매핑과 세팅이 포함되어 있다.

데이터 스트림으로 색인되는 모든 문서들은 반드시 date 또는 date_nanos 타입의 @timestamp 필드를 가지고 있어야 한다. 만약 @timestamp 필드에 대해 매핑 타입을 명시하지 않았다면 date 타입을 기본값으로 사용한다.

동일한 인덱스 템플릿을 여러 데이터 스트림에 사용할 수도 있다. 데이터 스트림에서 사용중인 인덱스 템플릿을 삭제할 수는 없다.

읽기 요청

데이터 스트림에 보내진 모든 읽기 요청은 뒷단 인덱스들로 라우팅된다.

 

쓰기 요청

가장 최근에 생성된 뒷단 인덱스는 데이터 스트림의 쓰기 인덱스이다. 데이터 스트림은 새로운 문서를 이 인덱스에만 추가한다.

 

다른 뒷단 인덱스에 직접적으로 요청을 보내더라도 쓰기 인덱스 이외엔 새 문서를 추가할 수 없다.

또한 아래와 같이 색인을 방해하는 작업들도 수행할 수 없다:

- Clone

- Delete

- Freeze

- Shrink

- Split

Rollover

롤오버를 통해 데이터 스트림의 새 쓰기 인덱스가 될 백단 인덱스가 생성된다.

ILM을 사용하여 데이터 스트림의 쓰기 인덱스가 특정 시간이나 크기를 초과했을 때 자동으로 변경되게 하는 것을 권장한다. 필요 시 수동으로 전환할 수도 있다.

데이터 스트림 생성

각 데이터 스트림은 각각의 생성 내역을 기록하고 있다: 000001부터 시작해서 롤오버 시 마다 값이 증가하는 빈 자리는 0으로 채워지는 6자리의 수

뒷단 인덱스의 이름은 아래와 같은 컨벤션을 따른다.

 

 

<yyyy.MM.dd> 는 뒷단 인덱스의 생성 날짜이다. 높은 세대의 뒷단 인덱스에는 더 최신 데이터가 담겨있다. 예를들어 34세대까지 생성된 tomcat-logs 데이터 스트림에서 가장 최신 뒷단 인덱스가 2021년 7월 6일에 생성된 경우 인덱스명은 .ds-tomcat-log-2021.07.06-000034 가 된다.

Shrink 나 restore 와 같은 일부 작업은 뒷단 인덱스의 이름을 바꿀 수 있는데, 이러한 이름 변경으로 데이터 스트림에서 뒷단 인덱스가 제외되지는 않는다.

Append-only

데이터 스트림은 저장된 데이터가 변경되는 경우는 극히 드물다는 전제로 설계되었다. 따라서 데이터 스트림 내 문서에 직접적으로 변경이나 삭제 요청을 보낼 수 없다. 대신, update by query나 delete by query API를 사용해야 한다.

필요 시 뒷단 인덱스 문서에 직접적으로 변경이나 삭제 요청을 보낼 수도 있다.

만약 문서의 변경이나 삭제가 잦다면 데이터 스트림 대신 index alias와 index template을 사용하는 것이 좋으며, ILM 으로 인덱스 alias에 대한 관리도 가능하다.

Reference

https://www.elastic.co/guide/en/elasticsearch/reference/current/data-streams.html

 

'Elasticsearch' 카테고리의 다른 글

[Guide] 샤드 크기 결정: 샤딩 전략과 고려 사항  (0) 2023.03.23
[Guide] 검색 속도 튜닝  (0) 2023.03.16

댓글