세그먼트 업로더 플러그인

세그먼트 업로더 플러그인 (Segment Uploader Plugin)

완성된 세그먼트 tar 파일을 Pinot 클러스터에 업로드하는 책임을 지는 세그먼트 업로더 플러그인에 대한 문서예요. 세그먼트 푸시의 세부 사항을 추상화해서 HTTP push, URI push, metadata push 같은 다양한 업로드 전략을 구성으로 지원할 수 있게 해줘요.

출처: 문서

본문

세그먼트 업로더 플러그인은 완성된 세그먼트 tar 파일을 Pinot 클러스터에 업로드하는 책임을 져요. 세그먼트 푸시의 세부 사항을 추상화해서 HTTP push, URI push, metadata push 같은 다양한 업로드 전략을 구성으로 지원할 수 있게 해줘요.

기본 구현인 SegmentUploaderDefault는 테이블 구성의 batchConfigMaps에서 푸시 구성을 읽고 실제 업로드는 IngestionUtils에 위임해요.

SPI 인터페이스 (SPI Interface)

커스텀 세그먼트 업로더를 작성하려면 SegmentUploader 인터페이스를 구현해요:

public interface SegmentUploader {

  void init(TableConfig tableConfig) throws Exception;

  void init(TableConfig tableConfig, Map<String, String> batchConfigOverride) throws Exception;

  void uploadSegment(URI segmentTarFile, AuthProvider authProvider) throws Exception;

  void uploadSegmentsFromDir(URI segmentDir, AuthProvider authProvider) throws Exception;
}

주요 메서드 (Key Methods)

메서드 설명
init(TableConfig) 테이블 구성의 배치 구성을 사용해 업로더를 초기화.
init(TableConfig, Map) 테이블 구성 위에 추가 구성 오버라이드로 초기화.
uploadSegment(URI, AuthProvider) 단일 세그먼트 tar 파일을 클러스터에 업로드.
uploadSegmentsFromDir(URI, AuthProvider) 디렉토리에서 모든 .tar.gz 세그먼트 파일을 재귀적으로 찾아 업로드.

기본 구현 (Default Implementation)

내장 SegmentUploaderDefault는 다음과 같이 동작해요:

  1. tableConfig.ingestionConfig.batchIngestionConfig에서 batchConfigMaps를 읽어요.
  2. 목록에 정확히 하나의 BatchConfig 항목을 요구해요.
  3. push.controllerUri 속성을 사용해 대상 컨트롤러를 결정해요.
  4. tar, uri, metadata 모든 푸시 모드를 지원해요.

구성 (Configuration)

세그먼트 업로더는 테이블 구성의 batchConfigMaps를 통해 구성돼요. 관련 속성은 다음과 같아요:

{
  "ingestionConfig": {
    "batchIngestionConfig": {
      "batchConfigMaps": [
        {
          "push.controllerUri": "https://pinot-controller:9000",
          "push.mode": "tar"
        }
      ]
    }
  }
}
속성 필수 설명
push.controllerUri 예 세그먼트 업로드용 Pinot 컨트롤러의 URI
push.mode 아니요 푸시 모드: tar(기본), uri, 또는 metadata

커스텀 세그먼트 업로더 작성 (Writing a Custom Segment Uploader)

커스텀 세그먼트 업로더를 구현하려면:

  1. SegmentUploader를 구현하는 클래스를 만들어요.
  2. Pinot 플러그인으로 패키징해요 (커스텀 플러그인 작성 참고).
  3. 플러그인 JAR을 Pinot /plugins 디렉토리에 넣어요.

커스텀 업로더는 다음과 같은 시나리오에 유용할 수 있어요:

  • 컨트롤러에 알리기 전에 커스텀 딥 스토어에 세그먼트 업로드
  • 업로드 중 커스텀 인증·암호화 추가
  • 세그먼트 수명주기를 관리하는 외부 오케스트레이션 시스템과 통합

더 알아보기 (Learn more)