Pulsar와 함께 GCS offloader 사용하기

Pulsar와 함께 GCS offloader 사용하기 (Use GCS offloader with Pulsar)

이 장은 GCS offloader를 설치·구성하고 Pulsar에서 사용하는 모든 단계를 안내해요. Google Cloud Storage(GCS)로 데이터를 오프로딩해 장기·저렴한 저장소를 활용하고 싶을 때 필요해요.

출처: 문서

본문

설치 (Installation)

사전 준비 (Prerequisite)

  • Pulsar: 2.4.2 이상 버전

단계 (Steps)

GCS offloader를 설치하려면 아래 단계를 따라요.

  1. Pulsar tarball 다운로드.
  2. Pulsar offloaders 패키지를 다운로드·압축 해제한 뒤 Pulsar 디렉터리에 offloaders로 복사해요. 계층형 저장소 offloader 설치 참고.

구성 (Configuration)

note BookKeeper에서 GCS로 데이터를 오프로딩하기 전에 GCS offload 드라이버의 일부 속성을 구성해야 해요.

또한 GCS offloader가 자동으로 실행되도록 구성하거나 수동으로 트리거할 수도 있어요.

GCS offloader 드라이버 구성 (Configure GCS offloader driver)

구성 파일 broker.conf 또는 standalone.conf에서 GCS offloader 드라이버를 구성할 수 있어요.

  • 필수(Required) 구성은 다음과 같아요.

| 필수 구성 | 설명 | 예시 값 | | managedLedgerOffloadDriver | Offloader 드라이버 이름(대소문자 구분 없음). | google-cloud-storage | | offloadersDirectory | Offloader 디렉터리 | offloaders | | gcsManagedLedgerOffloadBucket | 버킷 | pulsar-topic-offload | | gcsManagedLedgerOffloadRegion | 버킷 지역 | europe-west3 | | gcsManagedLedgerOffloadServiceAccountKeyFile | 인증 | /Users/user-name/Downloads/project-804d5e6a6f33.json |

  • 선택(Optional) 구성은 다음과 같아요.

| 선택 구성 | 설명 | 예시 값 | | gcsManagedLedgerOffloadReadBufferSizeInBytes | 읽기 블록 크기 | 1 MB | | gcsManagedLedgerOffloadMaxBlockSizeInBytes | 쓰기 블록 크기 | 64 MB | | managedLedgerMinLedgerRolloverTimeMinutes | 토픽의 원장 롤오버 사이 최소 시간. | 10 | | managedLedgerMaxEntriesPerLedger | 롤오버 전에 원장에 추가할 최대 항목 수. | 50000 |

버킷 (Bucket) (필수)

버킷은 데이터를 담는 기본 컨테이너예요. GCS에 저장하는 모든 것은 버킷에 포함되어야 해요. 버킷으로 데이터를 구성하고 접근을 제어할 수 있지만, 디렉터리·폴더와 달리 버킷은 중첩할 수 없어요.

예시 (Example)

이 예시는 버킷 이름을 pulsar-topic-offload로 정해요.

gcsManagedLedgerOffloadBucket=pulsar-topic-offload
버킷 지역 (Bucket region) (필수)

버킷 지역은 버킷이 위치한 지역이에요. 버킷 지역을 지정하지 않으면 기본 지역(us multi-regional location)이 사용돼요.

tip 버킷 위치에 대한 자세한 내용은 여기를 참고해요.

예시 (Example)

이 예시는 버킷 지역을 europe-west3로 설정해요.

gcsManagedLedgerOffloadRegion=europe-west3
인증 (Authentication) (필수)

브로커가 GCS에 접근하게 하려면 구성 파일 broker.conf에서 gcsManagedLedgerOffloadServiceAccountKeyFile을 구성해야 해요.

gcsManagedLedgerOffloadServiceAccountKeyFile은 서비스 계정의 GCS 자격 증명을 담은 JSON 파일이에요.

예시 (Example)

서비스 계정 자격 증명을 생성하거나 이미 생성한 공개 자격 증명을 보려면 다음 단계를 따라요.

  1. 서비스 계정 페이지로 이동해요.
  2. 프로젝트를 선택하거나 새로 만들어요.
  3. Create service account를 클릭해요.
  4. Create service account 창에서 서비스 계정 이름을 입력하고 Furnish a new private key를 선택해요.

서비스 계정에 G Suite 도메인 전체 권한을 부여하려면 Enable G Suite Domain-wide Delegation을 선택해요.

  1. Create를 클릭해요.

note 만든 서비스 계정이 GCS를 운영할 권한이 있는지 확인해요. 서비스 계정에 Storage Admin 권한을 여기에서 할당해야 해요.

  1. 다음 정보를 얻어 broker.conf에 설정할 수 있어요.
gcsManagedLedgerOffloadServiceAccountKeyFile="/Users/user-name/Downloads/project-804d5e6a6f33.json"

tip

  • gcsManagedLedgerOffloadServiceAccountKeyFile을 만드는 방법에 대한 자세한 내용은 여기를 참고해요.
  • Google Cloud IAM에 대한 자세한 내용은 여기를 참고해요.
블록 읽기/쓰기 크기 (Size of block read/write)

구성 파일 broker.conf에서 GCS로 보내거나 읽는 요청의 크기를 구성할 수 있어요.

| 구성 | 설명 | | gcsManagedLedgerOffloadReadBufferSizeInBytes | GCS에서 데이터를 다시 읽을 때 각 개별 읽기의 블록 크기.

기본 값은 1 MB예요. | | gcsManagedLedgerOffloadMaxBlockSizeInBytes | GCS에 멀티파트 업로드 중 보내는 "part"의 최대 크기.

5 MB보다 작을 수 없어요.

기본 값은 64 MB예요. |

GCS offloader를 자동으로 실행하도록 구성 (Configure GCS offloader to run automatically)

네임스페이스 정책을 구성하면 임계값에 도달했을 때 데이터를 자동으로 오프로딩하도록 할 수 있어요. 임계값은 토픽이 Pulsar 클러스터에 저장한 데이터 크기에 기반해요. 토픽이 임계값에 도달하면 오프로딩 작업이 자동으로 트리거돼요.

| 임계값 | 동작 | | > 0 | 토픽 저장소가 임계값에 도달하면 오프로딩 작업을 트리거해요. | | = 0 | 브로커가 가능한 한 빨리 데이터를 오프로딩하게 해요. | | < 0 | 자동 오프로딩 작업을 비활성화해요. |

자동 오프로딩은 새 세그먼트가 토픽 로그에 추가될 때 실행돼요. 네임스페이스에 임계값을 설정했지만 토픽에 생성되는 메시지가 적다면, 현재 세그먼트가 가득 차기 전까지 offloader는 동작하지 않아요.

pulsar-admin 같은 CLI 도구로 임계값 크기를 구성할 수 있어요.

broker.confstandalone.conf의 offload 구성은 네임스페이스 레벨 오프로드 정책이 없는 네임스페이스에 사용돼요. 각 네임스페이스는 고유한 offload 정책을 가질 수 있어요. 네임스페이스별 offload 정책을 설정하려면 pulsar-admin namespaces set-offload-policies options 명령을 사용해요.

예시 (Example)

이 예시는 pulsar-admin으로 GCS offloader 임계값 크기를 10 MB로 설정해요.

pulsar-admin namespaces set-offload-threshold --size 10M my-tenant/my-namespace

tip pulsar-admin namespaces set-offload-threshold options 명령에 대한 자세한 내용(플래그, 설명, 기본값, 약어 포함)은 Pulsar admin docs를 참고해요.

GCS offloader를 수동으로 실행하도록 구성 (Configure GCS offloader to run manually)

개별 토픽에 대해 다음 방법 중 하나로 GCS offloader를 수동으로 트리거할 수 있어요.

  • REST 엔드포인트 사용.
  • CLI 도구(예: pulsar-admin) 사용.

CLI 도구로 GCS를 트리거하려면 토픽에 대해 Pulsar 클러스터에 유지해야 하는 최대 데이터 양(임계값)을 지정해야 해요. Pulsar 클러스터의 토픽 데이터 크기가 이 임계값을 초과하면 임계값을 더 이상 초과하지 않을 때까지 토픽의 세그먼트가 GCS로 이동돼요. 더 오래된 세그먼트가 먼저 이동돼요.

예시 (Example)
  • 이 예시는 pulsar-admin topics offload (topic-name) (threshold) 명령으로 pulsar-admin을 사용해 GCS offloader를 수동으로 트리거해요.
pulsar-admin topics offload persistent://my-tenant/my-namespace/topic1 10M

출력 (Output)

Offload triggered for persistent://my-tenant/my-namespace/topic1 for messages before 2:0:-1

tip pulsar-admin topics offload options 명령에 대한 자세한 내용(플래그, 설명, 기본값, 약어 포함)은 Pulsar admin docs를 참고해요.

  • 이 예시는 pulsar-admin topics offload-status options 명령으로 pulsar-admin을 사용해 GCS offloader 상태를 확인해요.
pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1

출력 (Output)

Offload is currently running

GCS가 작업을 완료할 때까지 기다리려면 -w 플래그를 추가해요.

pulsar-admin topics offload-status -w persistent://my-tenant/my-namespace/topic1

출력 (Output)

Offload was a success

오프로딩에 오류가 있으면 오류는 pulsar-admin topics offload-status 명령으로 전파돼요.

pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1

출력 (Output)

Error in offload
null
Reason: Error offloading: org.apache.bookkeeper.mledger.ManagedLedgerException: java.util.concurrent.CompletionException: com.amazonaws.services.s3.model.AmazonS3Exception: Anonymous users cannot initiate multipart uploads.  Please authenticate. (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 798758DE3F1776DF; S3 Extended Request ID: dhBFz/lZm1oiG/oBEepeNlhrtsDlzoOhocuYMpKihQGXe6EG8puRGOkK6UwqzVrMXTWBxxHcS+g=), S3 Extended Request ID: dhBFz/lZm1oiG/oBEepeNlhrtsDlzoOhocuYMpKihQGXe6EG8puRGOkK6UwqzVrMXTWBxxHcS+g=

tip pulsar-admin topics offload-status options 명령에 대한 자세한 내용(플래그, 설명, 기본값, 약어 포함)은 Pulsar admin docs를 참고해요.

튜토리얼 (Tutorial)

Pulsar에서 GCS offloader를 사용하는 완전한 단계별 지침은 여기를 참고해요.

더 알아보기 (Learn more)