Java admin client

Java admin client

JVM 코드에서 controller REST API를 호출하는 데 Pinot Java admin client를 사용해요.

Pinot Java admin client는 org.apache.pinot:pinot-java-client의 controller 지향 절반이에요. JVM 코드가 스키마와 테이블을 생성하거나 검증하고, 세그먼트를 검사하거나 리셋하고, tenant와 인스턴스를 관리하고, controller REST API를 통해 Minion 작업 상태를 검사해야 할 때 사용하세요.

출처: 문서

본문

Java 쿼리 클라이언트와 달리 admin client는 broker와 통신하지 않아요. 엔트리 포인트는 org.apache.pinot.client.admin.PinotAdminClient이며 localhost:9000 같은 controller 주소로 생성돼요.

설치

admin client는 Java 쿼리 클라이언트와 같은 아티팩트에 들어 있어요.

<dependency>
  <groupId>org.apache.pinot</groupId>
  <artifactId>pinot-java-client</artifactId>
  <version>1.4.0</version>
</dependency>
implementation "org.apache.pinot:pinot-java-client:1.4.0"

기본 사용

controller에 대해 admin client를 생성한 다음 필요한 controller 표면에 대한 service client를 가져오세요.

import org.apache.pinot.client.admin.PinotAdminClient;

try (PinotAdminClient adminClient = new PinotAdminClient("localhost:9000")) {
  var tables = adminClient.getTableClient().listTables(null, null, null);
  var schemas = adminClient.getSchemaClient().listSchemaNames();
  var instances = adminClient.getInstanceClient().listInstances();
  var tenants = adminClient.getTenantClient().listTenants();
  var taskTypes = adminClient.getTaskClient().listTaskTypes();
}

사용 가능한 service client

PinotAdminClient는 주요 관리 표면에 대한 타입화된 controller 클라이언트를 지연 노출해요.

Method Scope
getTableClient() 테이블 CRUD, 테이블 상태, 리밸런스, 검증 및 관련 controller 작업
getSchemaClient() 스키마 CRUD 및 검증
getInstanceClient() 인스턴스 목록, 생성, 구성 업데이트, 활성화/비활성화 상태
getSegmentClient() 세그먼트 목록, 메타데이터, CRC, 리셋, 삭제 작업
getSegmentApiClient() 시간 범위 세그먼트 선택 및 직접 세그먼트 메타데이터 조회 같은 세그먼트 선택 API
getTenantClient() tenant CRUD, 메타데이터, tenant 리밸런스 헬퍼
getTaskClient() 작업 유형, 큐 상태, 작업 메타데이터, 작업 디버그, 작업 상태 검사

예시:

String schemaConfig =
    "{\"schemaName\":\"mySchema\",\"dimensionFieldSpecs\":[{\"name\":\"id\",\"dataType\":\"INT\"}]}";

try (PinotAdminClient adminClient = new PinotAdminClient("localhost:9000")) {
  String validation = adminClient.getSchemaClient().validateSchema(schemaConfig);
  String createResult = adminClient.getSchemaClient().createSchema(schemaConfig);
}

인증

admin client는 PinotAdminAuthentication.AuthType를 통해 NONE, BASIC, BEARER, CUSTOM 인증 모드를 지원해요.

Basic auth:

import java.util.Map;
import java.util.Properties;
import org.apache.pinot.client.admin.PinotAdminAuthentication;
import org.apache.pinot.client.admin.PinotAdminClient;

Properties properties = new Properties();
properties.setProperty("pinot.admin.request.timeout.ms", "30000");

try (PinotAdminClient adminClient = new PinotAdminClient(
    "localhost:9000",
    properties,
    PinotAdminAuthentication.AuthType.BASIC,
    Map.of("username", "admin", "password", "password"))) {
  String tableConfig = adminClient.getTableClient().getTableConfig("myTable");
}

Bearer auth:

try (PinotAdminClient adminClient = new PinotAdminClient(
    "localhost:9000",
    new Properties(),
    PinotAdminAuthentication.AuthType.BEARER,
    Map.of("token", "your-bearer-token"))) {
  var liveInstances = adminClient.getInstanceClient().listLiveInstances();
}

CUSTOM의 경우 controller로 보낼 헤더 맵을 전달하세요.

전송 설정

admin 전송은 PinotAdminClient에 전달하는 Properties 객체에서 설정을 읽어요.

Property Default Effect
pinot.admin.request.timeout.ms 60000 동기 호출과 async HTTP 클라이언트의 요청 및 읽기 타임아웃에 사용되는 요청 타임아웃
pinot.admin.scheme http Controller 스킴. TLS 활성화 controller에는 https로 설정

현재 전송 구현은 고정 10초 연결 타임아웃을 사용하고 pinot.admin.scheme=https일 때 JVM 기본 SSL 컨텍스트를 활성화해요.

비동기 작업 및 예외

admin 패키지에는 listTablesAsync, listSchemaNamesAsync, listInstancesAsync, listTenantsAsync, listTaskTypesAsync 및 세그먼트 관리 async 메서드 같은 많은 controller 작업의 비동기 변형이 포함돼요. 이들은 CompletableFuture를 반환하고 동기 메서드와 같은 전송 구성을 사용해요.

주요 예외 유형:

  • PinotAdminException — 일반 controller 또는 전송 실패
  • PinotAdminAuthenticationException — 잘못된 인증 구성 또는 인증 실패
  • PinotAdminNotFoundException — 요청한 controller 리소스가 존재하지 않을 때
  • PinotAdminValidationException — Pinot가 제출된 구성이나 요청을 거부할 때

Segment API 헬퍼

PinotSegmentApiClient는 PinotSegmentAdminClient와 별개예요. 세그먼트 CRUD보다는 세그먼트 선택 워크플로우에 가까운 controller 엔드포인트(시간 범위 세그먼트 선택 포함)에 사용하세요.

try (PinotAdminClient adminClient = new PinotAdminClient("localhost:9000")) {
  var selection = adminClient.getSegmentApiClient()
      .selectSegments("myTable", "OFFLINE", 1709251200000L, 1709337600000L, false);
  var metadata = adminClient.getSegmentApiClient()
      .getSegmentMetadata("myTable_OFFLINE", "myTable_0");
}

더 알아보기 (Learn more)