Historical 서비스

Historical 서비스 (Historical service)

Historical 서비스는 히스토리컬(과거) 데이터를 저장하고 쿼리하는 역할을 담당해요. 데이터 segment를 로컬 디스크에 캐시하고, 그 캐시와 인메모리 캐시에서 쿼리를 서비스해요.

출처: 문서

본문

Historical 서비스는 히스토리컬 데이터를 저장하고 쿼리하는 역할을 담당해요.

Historical 서비스는 데이터 segment를 로컬 디스크에 캐시하고, 그 캐시뿐 아니라 인메모리 캐시에서도 쿼리를 서비스해요.

설정 (Configuration)

Apache Druid Historical 서비스 설정은 Historical configuration을 참고하세요.

Historical 서비스에 대한 기본 튜닝 지침은 Basic cluster tuning을 참고하세요.

HTTP 엔드포인트

Historical이 지원하는 API 엔드포인트 목록은 Service status API reference를 참고하세요.

실행 (Running)

org.apache.druid.cli.Main server historical

segment 로드 및 서비스

각 Historical 서비스는 segment 파일을 deep storage에서 segment cache라고 하는 영역의 로컬 디스크로 복사하거나 가져와요. 각 Historical 서비스의 segment cache 크기와 위치를 구성하려면 druid.segmentCache.locations을 설정하세요.

자세한 내용은 Segment cache size를 참고하세요.

Coordinator가 Historical에 대한 segment 할당과 Historical 간 segment 균형을 제어해요. Historical 서비스는 서로 직접 통신하지도, Coordinator와 직접 통신하지도 않아요. 대신 Coordinator가 ZooKeeper의 load queue 경로에 ephemeral 항목을 만들어요. 각 Historical 서비스는 ZooKeeper에 연결을 유지하면서 그 경로들에서 segment 정보를 감시해요.

Historical 서비스가 ZooKeeper load queue에서 새 항목을 감지하면 자신의 segment cache를 확인해요. 그 segment에 대한 정보가 없으면, Historical 서비스는 먼저 ZooKeeper에서 segment에 대한 메타데이터를 가져와요. 여기에는 segment가 deep storage의 어디에 있는지, 어떻게 압축 해제하고 처리해야 하는지가 포함돼요.

segment 메타데이터와 일반적인 Druid segment에 대한 자세한 내용은 Segments를 참고하세요.

Historical 서비스가 deep storage에서 segment를 내려받아 처리한 후, Druid는 그 segment를 Broker의 쿼리에 이용 가능하다고 알려요(advertise). 이 Historical의 알림은 served segments 경로를 통해 ZooKeeper로 이루어져요.

Broker가 어떤 데이터가 쿼리에 이용 가능한지 결정하는 방법은 Broker를 참고하세요.

segment cache의 데이터를 가능한 한 빨리 쿼리 가능하게 만들기 위해, Historical 서비스는 시작 시 로컬 segment cache를 검색하고 그곳에서 찾은 segment를 알려요.

캐시에서 segment 로드 및 서비스

segment cache는 memory mapping을 사용해요. 캐시는 기본 운영체제의 메모리를 소비하므로, Historical은 segment 파일의 일부를 메모리에 보유해 데이터 수준에서 쿼리 성능을 높일 수 있어요. 인메모리 segment cache는 Historical JVM의 크기, heap/direct memory 버퍼, 운영체제 자체의 다른 서비스에 영향을 받아요.

쿼리 시점에 segment 파일의 필요한 부분이 memory-mapped cache 또는 "page cache"에 있으면, Historical은 그것을 재사용해서 메모리에서 직접 읽어요. memory-mapped cache에 없으면 Historical은 그 segment 부분을 디스크에서 읽어요. 이 경우 새 데이터가 다른 segment 데이터를 메모리에서 밀어낼 가능성이 있어요. 즉, 운영체제의 여유 메모리가 druid.server.maxSize에 가까울수록 segment 데이터가 메모리에 있을 가능성이 높아져 쿼리 시간이 줄어들어요. 반대로 운영체제 여유 메모리가 낮을수록 Historical이 segment를 디스크에서 읽을 가능성이 높아져요.

이 memory-mapped segment cache는 다른 query-level caches에 추가로 존재한다는 점에 유의하세요.

segment 쿼리

Historical 서비스가 서비스하는 모든 쿼리에 대한 메트릭을 로깅하고 보고하도록 구성할 수 있어요.

Historical 서비스 쿼리에 대한 정보는 Querying을 참고하세요.

더 알아보기 (Learn more)

  • Segments — segment 메타데이터와 구조를 알아봐요.
  • Broker — Historical의 가용 segment를 찾아 쿼리를 라우팅하는 서비스.
  • Coordinator — Historical에 segment를 할당하는 서비스.