Apache Pinot 및 Presto 빌드

최근에 우리는 일부 스트리밍 데이터베이스 솔루션을 조사했으며 기본 대상은 Apache Pinot 입니다. 이는 설명에서 우리의 요구 사항에 부합하므로 기본 대상입니다.

Apache Pinot, a real-time distributed OLAP datastore, purpose-built for low-latency high throughput analytics, perfect for user-facing analytical workloads.



그러나 official documents 중 일부는 실제로 누락되어 인터넷에서 정보를 찾고 마침내 몇 가지 실험을 할 수 있었습니다. 당시에는 이러한 프로세스가 문서화되지 않았기 때문에 실제로 어떤 참조 자료가 사용되었는지 잘 모르겠습니다.

현재 전체 실험 인프라는 docker-compose로 구축되어 있으며 Github 저장소의 전체 코드는 다음과 같습니다.
https://github.com/wirelessr/pinot-plus-presto

아파치 피노



먼저 핵심 구성 요소를 설명하기 위해 docker-compose.yml를 살펴보겠습니다.

services:
  zookeeper:
    image: zookeeper:3.5.6

  pinot-controller:
    image: apachepinot/pinot:0.9.3
    ports:
      - "9000:9000"
      - "8888"
    environment:
      JAVA_OPTS: "-javaagent:/opt/pinot/etc/jmx_prometheus_javaagent/jmx_prometheus_javaagent-0.12.0.jar=8888:/opt/pinot/etc/jmx_prometheus_javaagent/configs/pinot.yml -Dplugins.dir=/opt/pinot/plugins -Xms1G -Xmx4G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Xloggc:gc-pinot-controller.log"

  pinot-broker:
    image: apachepinot/pinot:0.9.3
    ports:
      - "8099:8099"
      - "8888"
    environment:
      JAVA_OPTS: "-javaagent:/opt/pinot/etc/jmx_prometheus_javaagent/jmx_prometheus_javaagent-0.12.0.jar=8888:/opt/pinot/etc/jmx_prometheus_javaagent/configs/pinot.yml -Dplugins.dir=/opt/pinot/plugins -Xms4G -Xmx4G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Xloggc:gc-pinot-broker.log"

  pinot-server:
    image: apachepinot/pinot:0.9.3
    ports:
      - "8098:8098"
      - "8888"
    environment:
      JAVA_OPTS: "-javaagent:/opt/pinot/etc/jmx_prometheus_javaagent/jmx_prometheus_javaagent-0.12.0.jar=8888:/opt/pinot/etc/jmx_prometheus_javaagent/configs/pinot.yml -Dplugins.dir=/opt/pinot/plugins -Xms4G -Xmx16G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Xloggc:gc-pinot-server.log"


위의 내용은 피노를 구성하기 위해 필요한 4가지 기본 서비스이며, 공식 문서와 동일한 부분은 대부분 생략하고 제가 수정한 부분만 나열하였습니다. 그런데 이미지 버전을 새 버전으로 변경했지만 예제에서는 공식 버전을 유지하겠습니다.

주요 변경 사항은 세 가지 Pinot 서비스의 portsenvironment로, Prometheus에서 Pinot의 메트릭을 사용할 수 있도록 합니다.

따라서 ports는 추가 8888를 열고 추가 javaagent 매개변수를 JAVA_OPTS에 추가합니다. javaagent의 목적은 원래 Pinot JMX 메트릭이 웹 기반이 되고 Prometheus에 노출되도록 하는 것입니다.

지금까지 공식 문서의 jmx_prometheus_javaagent.jar에는 버전 번호가 포함되어 있지 않지만 공식 컨테이너에서 해당 파일을 찾을 수 없으므로 대신 jmx_prometheus_javaagent-0.12.0.jar를 사용해야 합니다.

모니터링



서비스 상태를 관찰하기 위해 PrometheusGrafana 도 빌드해야 합니다.

  prometheus:
    image: prom/prometheus
    container_name: monitoring-prometheus
    restart: unless-stopped
    volumes:
    - monitoring-prometheus-data-1:/prometheus
    - ./volumes/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
    - "9090:9090"
  grafana:
    image: grafana/grafana
    volumes:
    - ./volumes/grafana/provisioning:/etc/grafana/provisioning
    - ./volumes/grafana/dashboards:/var/lib/grafana/dashboards
    ports:
    - "3000:3000"
    environment:
      GF_SERVER_ROOT_URL: https://localhost:3000
      GF_SECURITY_ADMIN_PASSWORD: password

volumes에서 이 두 서비스에 필요한 구성 파일을 정의합니다.
  • Prometheus는 메트릭을 가져올 위치를 알아야 하므로 세 Pinot 서비스의 FQDN을 설정해야 합니다.
  • Grafana에는 데이터 소스 설정 및 Pinot 관련 대시보드가 ​​필요합니다.
  • docker-compose 를 실행한 후 https://localhost:3000 에서 대시보드를 볼 수 있습니다. 계정과 비밀번호는 간단하게 adminpassowrd 입니다.

    아파치 프레스토



    마지막 서비스는 Presto 입니다.

    Presto가 필요한 이유는 무엇입니까? Pinot이 SQL을 지원하기 때문에 실제로는 Pinot이 지원하지 않습니다JOIN. 두 개의 테이블을 병합해야 하는 경우 외부 SQL 엔진에서 제공해야 합니다.

    Presto는 ANSI SQL과 Pinot를 비롯한 여러 데이터 소스를 지원하는 SQL 엔진이므로 실험에 Presto를 사용하기로 했습니다.

      presto-coordinator:
        image: apachepinot/pinot-presto
        restart: unless-stopped
        ports:
        - "18080:8080"
    


    Presto에는 코디네이터와 작업자의 두 가지 역할이 있습니다. 실험 환경에서는 코디네이터의 내장 작업자를 사용하기만 하면 됩니다.

    공식 컨테이너apachepinot/pinot-presto는 아무런 설정 없이 기본적으로 코디네이터이며 이미 FQDNpinot-controller:9000을 사용하고 있으므로 아무것도 변경할 필요가 없으며 바로 사용할 수 있습니다.

    결론



    Github 리포지토리를 복제한 후 docker-compose up -d를 직접 실행하여 실험 환경을 제대로 실행할 수 있습니다.

    전체 실험 환경에는 세 가지 핵심 사항이 포함되어 있습니다.
  • Apache Pinot: 스트리밍 데이터베이스 자체입니다.
  • Prometheus 및 Grafana: 프로덕션 환경을 에뮬레이트하는 모니터링 시스템입니다.
  • Apache Presto: Pinot에서 사용할 수 없는 쿼리 기능입니다.

  • 그런데 공식 문서에는 보안이 적용된 Kafka를 사용하는 방법이 소개되어 있지 않고 보안이 없는 Kafka만 예로 들어 설명되어 있습니다.

    Confluent 의 경우 카프카에 SASL_SSL 가 내장되어 있는데 이 글을 참고하여 카프카의 계정과 비밀번호를 설정한다.
    https://dev.startree.ai/docs/pinot/recipes/kafka-sasl

    이 실험 환경은 Presto 작업자 추가와 같은 일부 요구 사항에 따라 확장될 수 있습니다.

    좋은 웹페이지 즐겨찾기