Kubernetes에서의 스트림 수집

Kubernetes에서의 스트림 수집 (Stream Ingestion on Kubernetes)

Kafka를 이용해 Kubernetes에서 실행 중인 Pinot 클러스터에 스트리밍 데이터를 로드하는 방법이에요. 실시간 데이터 수집 파이프라인을 쿠버네티스 환경에서 구성하고 싶다면 이 가이드를 따라가면 돼요.

출처: Stream Ingestion on Kubernetes

본문

이 가이드는 Kubernetes에서 실행 중인 Pinot 클러스터에 스트리밍 데이터를 로드하는 과정을 안내해요. 먼저 Running in Kubernetes를 완료했는지 확인하세요.

Kafka를 사용해 Pinot에 데이터 로드 (Load data into Pinot using Kafka)

실시간 데이터 수집용 Kafka 클러스터 구동

💡 Bitnami Kafka Helm 차트는 기본적으로 Kafka를 KRaft 모드(내장 controller quorum 포함)로 배포해요. 따라서 Kafka를 위해 별도의 ZooKeeper 배포가 필요 없어요.

helm repo add kafka https://charts.bitnami.com/bitnami
helm install -n pinot-quickstart kafka kafka/kafka \
    --set replicas=1 \
    --set listeners.client.protocol=PLAINTEXT

Kafka 배포 상태 확인

다음 단계의 스크립트를 실행하기 전에 Kafka 배포가 준비됐는지 확인하세요. 다음 명령을 실행합니다:

kubectl get all -n pinot-quickstart | grep kafka

배포가 준비된 것을 보여주는 예시 출력:

pod/kafka-controller-0                   1/1     Running     0          2m
pod/kafka-controller-1                   1/1     Running     0          2m
pod/kafka-controller-2                   1/1     Running     0          2m

Kafka 토픽 생성

데이터 수집용 Kafka 토픽 두 개를 만들려면 아래 스크립트를 실행하세요:

kubectl -n pinot-quickstart exec kafka-controller-0 -- kafka-topics.sh --bootstrap-server kafka:9092 --topic flights-realtime --create --partitions 1 --replication-factor 1
kubectl -n pinot-quickstart exec kafka-controller-0 -- kafka-topics.sh --bootstrap-server kafka:9092 --topic flights-realtime-avro --create --partitions 1 --replication-factor 1

Kafka에 데이터 로드 및 Pinot 스키마/테이블 생성

아래 스크립트는 다음 작업을 수행해요:

  • 초당 1개 메시지 속도로 Kafka 토픽 flights-realtime에 JSON 메시지 19492개 수집
  • 초당 1개 메시지 속도로 Kafka 토픽 flights-realtime-avro에 Avro 메시지 19492개 수집
  • Pinot 스키마 airlineStats 업로드
  • JSON 인코딩 Kafka 토픽 flights-realtime에서 데이터를 수집하는 Pinot 테이블 airlineStats 생성
  • Avro 인코딩 Kafka 토픽 flights-realtime-avro에서 데이터를 수집하는 Pinot 테이블 airlineStatsAvro 생성
kubectl apply -f pinot/helm/pinot/pinot-realtime-quickstart.yml

Pinot Data Explorer로 쿼리 (Query with the Pinot Data Explorer)

Pinot Data Explorer

다음 스크립트(./pinot/helm/pinot에 위치)는 로컬 포트 포워딩을 수행하고 기본 웹 브라우저에서 Pinot 쿼리 콘솔을 엽니다.

./query-pinot-data.sh

더 알아보기 (Learn more)