계층형 저장소
계층형 저장소 (Tiered Storage) 개요
Pulsar의 Tiered Storage(계층형 저장소) 기능은 오래된 백로그 데이터를 BookKeeper에서 장기·저렴한 저장소로 옮기면서도, 클라이언트가 아무것도 변하지 않은 것처럼 백로그에 접근할 수 있게 해줘요. 이번에는 계층형 저장소가 무엇이고, 왜 쓰는지, 어떻게 동작하는지 함께 살펴볼게요.
출처: 문서
본문
계층형 저장소는 장기 저장소로 Amazon S3, GCS(Google Cloud Storage), Azure, Aliyun OSS를 지원하기 위해 Apache jclouds를 사용해요.
- Pulsar에서 AWS S3 offloader 사용법;
- Pulsar에서 GCS offloader 사용법;
- Pulsar에서 Azure BlobStore offloader 사용법;
- Pulsar에서 Aliyun OSS offloader 사용법;
- Pulsar에서 S3 offloader 사용법.
계층형 저장소는 장기 저장소의 파일시스템을 지원하기 위해 Apache Hadoop을 사용해요.
- Pulsar에서 filesystem offloader 사용법.
tip AWS S3 offloader는 작업을 수행하기 전에 region, service URL 같은 특정 AWS 메타데이터를 등록하고 버킷 위치를 요청해요. Amazon 서비스에 접근할 수 없다면, 메타데이터가 없는 S3 호환 API인 S3 offloader를 대신 사용할 수 있어요.
계층형 저장소는 언제 사용할까요? (When to use tiered storage?)
계층형 저장소는 매우 오랜 시간 동안 매우 긴 백로그를 유지하고 싶은 토픽이 있을 때 사용해야 해요.
예를 들어 추천 시스템을 훈련하는 데 사용하는 사용자 행동을 담은 토픽이 있다고 가정해요. 추천 알고리즘을 바꾸면 전체 사용자 이력으로 다시 실행할 수 있도록 그 데이터를 오랫동안 유지하고 싶을 수 있어요.
계층형 저장소 offloader 설치 방법 (How to install tiered storage offloaders?)
Pulsar는 계층형 저장소 offloader를 포함한 별도의 바이너리 배포판을 릴리스해요. 이 offloader들을 활성화하려면 다음 단계를 완료해야 해요.
- offloaders tarball 릴리스를 내려받아요.
wget https://archive.apache.org/dist/pulsar/pulsar-5.0.0-M2/apache-pulsar-offloaders-5.0.0-M2-bin.tar.gz
- offloaders 패키지를 풀고 pulsar 디렉터리에
offloaders로 복사해요.
tar xvfz apache-pulsar-offloaders-5.0.0-M2-bin.tar.gz
mv apache-pulsar-offloaders-5.0.0-M2/offloaders offloaders
ls offloaders
# tiered-storage-file-system-5.0.0-M2.nar
# tiered-storage-jcloud-5.0.0-M2.nar
계층형 저장소 구성 방법에 대한 자세한 내용은 Tiered storage cookbook을 참고해요.
note
- 베어메탈 클러스터에서 Pulsar를 실행한다면
offloaderstarball이 모든 브로커의 pulsar 디렉터리에 압축 해제되어 있는지 확인해요.- Docker에서 Pulsar 실행 또는 docker 이미지로 Pulsar를 배포한다면(예: K8S)
apachepulsar/pulsar이미지 대신apachepulsar/pulsar-all이미지를 사용할 수 있어요.apachepulsar/pulsar-all이미지는 계층형 저장소 offloader를 이미 번들하고 있어요.
계층형 저장소가 동작하는 방식 (How does tiered storage work?)
Pulsar의 토픽은 로그(log), 즉 **관리 원장(managed ledger)**이 백엔드로 동작해요. 이 로그는 정렬된 세그먼트 목록으로 구성돼요. Pulsar는 로그의 마지막 세그먼트에만 씁니다. 이전의 모든 세그먼트는 봉인(sealed)돼요. 세그먼트 내부의 데이터는 불변(immutable)이에요. 이를 **세그먼트 지향 아키텍처(segment-oriented architecture)**라고 해요.
계층형 저장소는 다음과 같이 동작해요.
-
계층형 저장소 오프로딩 메커니즘은 세그먼트 지향 아키텍처를 활용해요. 오프로딩이 요청되면 로그의 세그먼트가 하나씩 계층형 저장소로 복사돼요. 계층형 저장소에 쓰여진 로그의 모든 세그먼트(현재 세그먼트 제외)는 오프로딩될 수 있어요.
-
BookKeeper에 쓰여진 데이터는 기본적으로 3대의 물리 머신에 복제돼요. 하지만 BookKeeper에서 세그먼트가 봉인되면 불변이 되고 장기 저장소로 복사될 수 있어요. 장기 저장소는 상당한 비용 절감을 이룰 가능성이 있어요.
-
원장을 장기 저장소로 오프로딩하기 전에 클라우드 저장소 서비스용 버킷, 자격 증명, 기타 속성을 구성해야 해요.
-
추가로 Pulsar는 멀티파트 객체(multi-part objects)를 사용해 세그먼트 데이터를 업로드하며, 업로드 중에 브로커가 크래시할 수도 있어요. 불완전한 업로드에 대해 비용이 청구되지 않도록 버킷에 라이프사이클 규칙을 추가해 불완전한 멀티파트 업로드를 하루나 이틀 후에 만료시키는 것을 권장해요.
-
게다가 오프로딩 작업을 수동으로(REST API 또는 CLI로) 또는 자동으로(CLI로) 트리거할 수 있어요.
-
원장을 장기 저장소로 전송한 뒤에도 이 원장 안의 메시지는 Pulsar 컨슈머와 리더가 계속 접근할 수 있어, 데이터 검색의 투명성을 보장해요.
Pulsar 토픽의 계층형 저장소에 대한 자세한 내용은 PIP-17과 offload metrics를 참고해요.
더 알아보기 (Learn more)
- AWS S3 offloader 사용법은 tiered-storage-aws 문서를 참고해요.
- S3 호환 API인 S3 offloader는 tiered-storage-s3 문서를 봐요.
- GCS offloader는 tiered-storage-gcs 문서를 살펴봐요.
- 구성 방법은 Tiered storage cookbook 문서를 확인해요.