Pulsar와 함께 S3 offloader 사용하기

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

S3 offloader는 S3 호환 저장소를 제공하기 위해 도입됐어요. 이는 저장소가 S3 API를 "언어"로 사용하고, S3 API를 말하는 애플리케이션이 S3 호환 저장소와 플러그 앤 플레이할 수 있다는 뜻이에요. AWS 이외의 S3 호환 데이터 저장소를 쓸 때 필요한 내용을 함께 살펴볼게요.

출처: 문서

본문

이 장은 S3 offloader를 설치·구성하고 Pulsar에서 사용하는 모든 단계를 안내해요.

설치 (Installation)

사전 준비 (Prerequisite)

  • Pulsar: 2.9.3 이상 버전

단계 (Steps)

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

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

구성 (Configuration)

note BookKeeper에서 S3 호환 저장소로 데이터를 오프로딩하기 전에 S3 offload 드라이버의 일부 속성을 구성해야 해요. 또한 S3 offloader가 자동으로 실행되도록 구성하거나 수동으로 트리거할 수도 있어요.

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

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

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

| 필수 구성 | 설명 | 예시 값 | | managedLedgerOffloadDriver | Offloader 드라이버 이름(대소문자 구분 없음). | S3 | | offloadersDirectory | Offloader 디렉터리 | offloaders | | managedLedgerOffloadBucket | 버킷 | pulsar-topic-offload | | managedLedgerOffloadServiceEndpoint | 엔드포인트 | http://localhost:9000 |

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

| 선택 | 설명 | 기본값 | | managedLedgerOffloadReadBufferSizeInBytes | S3 호환 저장소에서 데이터를 다시 읽을 때 각 개별 읽기의 블록 크기. | 1 MB | | managedLedgerOffloadMaxBlockSizeInBytes | S3 호환 저장소에 멀티파트 업로드 중 보내는 최대 블록 크기. 5 MB보다 작을 수 없어요. | 64 MB | | managedLedgerMinLedgerRolloverTimeMinutes | 토픽의 원장 롤오버 사이 최소 시간.

참고: 프로덕션 환경에서 기본값을 변경하는 것은 권장하지 않아요. | 10 | | managedLedgerMaxEntriesPerLedger | 롤오버 전에 원장에 추가할 최대 항목 수.

참고: 프로덕션 환경에서 기본값을 변경하는 것은 권장하지 않아요. | 50000 |

버킷 (Bucket) (필수)

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

예시 (Example)

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

managedLedgerOffloadBucket=pulsar-topic-offload
엔드포인트 (Endpoint) (필수)

엔드포인트는 버킷이 위치한 지역이에요.

예시 (Example)

이 예시는 엔드포인트를 localhost로 설정해요.

managedLedgerOffloadServiceEndpoint=http://localhost:9000
인증 (Authentication) (선택)

S3 호환 저장소에 접근하려면 S3 호환 저장소와 인증해야 해요.

conf/pulsar_env.sh에서 환경 변수 ACCESS_KEY_IDACCESS_KEY_SECRET를 설정해요.

export ACCESS_KEY_ID=ABC123456789
export ACCESS_KEY_SECRET=ded7db27a4558e2ea8bbf0bf37ae0e8521618f366c

note 이러한 환경 변수를 export하면 하위 프로세스 환경에서 사용할 수 있게 돼요.

S3 offloader를 자동으로 실행 (Run S3 offloader 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으로 S3 offloader 임계값 크기를 10 MB로 설정해요.

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

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

S3 offloader를 수동으로 실행 (Run S3 offloader manually)

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

  • REST 엔드포인트 사용.
  • pulsar-admin 같은 CLI 도구 사용.

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

예시 (Example)

  • 이 예시는 pulsar-admin으로 S3 offloader를 수동으로 실행하도록 트리거해요.
bin/pulsar-admin topics offload --size-threshold 10M my-tenant/my-namespace/topic1

출력 (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으로 S3 offloader 상태를 확인해요.
bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1

출력 (Output)

Offload is currently running

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

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

출력 (Output)

Offload was a success

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

bin/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를 참고해요.

더 알아보기 (Learn more)