Pulsar와 함께 AWS S3 offloader 사용하기
Pulsar와 함께 AWS S3 offloader 사용하기 (Use AWS S3 offloader with Pulsar)
이 장은 AWS S3 offloader를 설치·구성하고 Pulsar에서 사용하는 모든 단계를 안내해요. BookKeeper의 데이터를 AWS S3로 오프로딩해 장기·저렴한 저장소를 활용하고 싶을 때 필요해요.
출처: 문서
본문
설치 (Installation)
사전 준비 (Prerequisite)
- Pulsar: 2.4.2 이상 버전
단계 (Steps)
AWS S3 offloader를 설치하려면 아래 단계를 따라요.
- Pulsar tarball 다운로드.
- Pulsar offloaders 패키지를 다운로드·압축 해제한 뒤 Pulsar 디렉터리에
offloaders로 복사해요. 계층형 저장소 offloader 설치 참고.
구성 (Configuration)
note BookKeeper에서 AWS S3로 데이터를 오프로딩하기 전에 AWS S3 offload 드라이버의 일부 속성을 구성해야 해요.
또한 AWS S3 offloader가 자동으로 실행되도록 구성하거나 수동으로 트리거할 수도 있어요.
AWS S3 offloader 드라이버 구성 (Configure AWS S3 offloader driver)
구성 파일 broker.conf 또는 standalone.conf에서 AWS S3 offloader 드라이버를 구성할 수 있어요.
- 필수(Required) 구성은 다음과 같아요.
| 필수 구성 | 설명 | 예시 값 |
| managedLedgerOffloadDriver | Offloader 드라이버 이름(대소문자 구분 없음).
참고: AWS S3와 동일한 세 번째 드라이버 유형 S3도 있어요. S3는 s3ManagedLedgerOffloadServiceEndpoint로 엔드포인트 URL을 지정해야 해요. AWS S3 이외의 S3 호환 데이터 저장소를 사용할 때 유용해요. | aws-s3 |
| offloadersDirectory | Offloader 디렉터리 | offloaders |
| s3ManagedLedgerOffloadBucket | 버킷 | pulsar-topic-offload |
- 선택(Optional) 구성은 다음과 같아요.
| 선택 | 설명 | 예시 값 |
| s3ManagedLedgerOffloadRegion | 버킷 지역
참고: 이 파라미터에 값을 지정하기 전에 다음 구성을 설정해야 해요. 그렇지 않으면 오류가 발생할 수 있어요.
- s3ManagedLedgerOffloadServiceEndpoint를 설정해요.
예) s3ManagedLedgerOffloadServiceEndpoint=https://s3.YOUR_REGION.amazonaws.com
- 사용자에게 GetBucketLocation 권한을 부여해요. GetBucketLocation 권한 부여 방법은 여기를 참고해요. | eu-west-3 |
| s3ManagedLedgerOffloadReadBufferSizeInBytes | 읽기 블록 크기 | 1 MB |
| s3ManagedLedgerOffloadMaxBlockSizeInBytes | 쓰기 블록 크기 | 64 MB |
| managedLedgerMinLedgerRolloverTimeMinutes | 토픽의 원장 롤오버 사이 최소 시간
참고: 프로덕션 환경에서는 이 구성을 설정하지 않는 것을 권장해요. | 10 |
| managedLedgerMaxEntriesPerLedger | 롤오버 전에 원장에 추가할 최대 항목 수.
참고: 프로덕션 환경에서는 이 구성을 설정하지 않는 것을 권장해요. | 50000 |
버킷 (Bucket) (필수)
버킷은 데이터를 담는 기본 컨테이너예요. AWS S3에 저장하는 모든 것은 버킷에 포함되어야 해요. 버킷으로 데이터를 구성하고 접근을 제어할 수 있지만, 디렉터리·폴더와 달리 버킷은 중첩할 수 없어요.
예시 (Example)
이 예시는 버킷 이름을 pulsar-topic-offload로 정해요.
s3ManagedLedgerOffloadBucket=pulsar-topic-offload
버킷 지역 (Bucket region)
버킷 지역은 버킷이 위치한 지역이에요. 버킷 지역을 지정하지 않으면 기본 지역(US East (N. Virginia))이 사용돼요.
tip AWS 지역과 엔드포인트에 대한 자세한 내용은 여기를 참고해요.
예시 (Example)
이 예시는 버킷 지역을 europe-west-3로 설정해요.
s3ManagedLedgerOffloadRegion=eu-west-3
인증 (Authentication) (필수)
AWS S3에 접근하려면 AWS S3와 인증해야 해요.
Pulsar는 AWS S3 인증 구성을 위한 직접적인 방법을 제공하지 않고, DefaultAWSCredentialsProviderChain이 지원하는 메커니즘에 의존해요.
AWS IAM 콘솔에서 자격 증명 세트를 만든 뒤, 다음 방법 중 하나로 자격 증명을 구성할 수 있어요.
- EC2 인스턴스 메타데이터 자격 증명 사용. 자격 증명을 제공하는 인스턴스 프로파일이 있는 AWS 인스턴스에서 실행 중이라면, 다른 메커니즘이 제공되지 않을 때 Pulsar는 이 자격 증명을 사용해요.
conf/pulsar_env.sh에서 환경 변수AWS_ACCESS_KEY_ID와AWS_SECRET_ACCESS_KEY를 설정. 하위 프로세스 환경에서 변수를 사용할 수 있게 하려면 "export"가 중요해요.
export AWS_ACCESS_KEY_ID=ABC123456789
export AWS_SECRET_ACCESS_KEY=ded7db27a4558e2ea8bbf0bf37ae0e8521618f366c
conf/pulsar_env.sh의PULSAR_EXTRA_OPTS에 Java 시스템 속성aws.accessKeyId와aws.secretKey를 추가.
PULSAR_EXTRA_OPTS="${PULSAR_EXTRA_OPTS} ${PULSAR_MEM} ${PULSAR_GC} -Daws.accessKeyId=ABC123456789 -Daws.secretKey=ded7db27a4558e2ea8bbf0bf37ae0e8521618f366c -Dio.netty.leakDetectionLevel=disabled -Dio.netty.recycler.maxCapacityPerThread=4096"
~/.aws/credentials에 접근 자격 증명을 설정.
[default]
aws_access_key_id=ABC123456789
aws_secret_access_key=ded7db27a4558e2ea8bbf0bf37ae0e8521618f366c
- IAM 역할을 가정(assume).
이 예시는 이 역할을 가정하기 위해
DefaultAWSCredentialsProviderChain을 사용해요.pulsar_env에 지정된 자격 증명이 적용되려면 브로커를 재부팅해야 해요.
s3ManagedLedgerOffloadRole=<aws role arn>
s3ManagedLedgerOffloadRoleSessionName=pulsar-s3-offload
블록 읽기/쓰기 크기 (Size of block read/write)
구성 파일 broker.conf 또는 standalone.conf에서 AWS S3로 보내거나 읽는 요청의 크기를 구성할 수 있어요.
| 구성 | 설명 | 기본값 |
| s3ManagedLedgerOffloadReadBufferSizeInBytes | AWS S3에서 데이터를 다시 읽을 때 각 개별 읽기의 블록 크기. | 1 MB |
| s3ManagedLedgerOffloadMaxBlockSizeInBytes | AWS S3에 멀티파트 업로드 중 보내는 "part"의 최대 크기. 5 MB보다 작을 수 없어요. | 64 MB |
AWS S3 offloader를 자동으로 실행하도록 구성 (Configure AWS S3 offloader to run automatically)
네임스페이스 정책을 구성하면 임계값에 도달했을 때 데이터를 자동으로 오프로딩하도록 할 수 있어요. 임계값은 토픽이 Pulsar 클러스터에 저장한 데이터 크기에 기반해요. 토픽이 임계값에 도달하면 오프로딩 작업이 자동으로 트리거돼요.
| 임계값 | 동작 | | > 0 | 토픽 저장소가 임계값에 도달하면 오프로딩 작업을 트리거해요. | | = 0 | 브로커가 가능한 한 빨리 데이터를 오프로딩하게 해요. | | < 0 | 자동 오프로딩 작업을 비활성화해요. |
자동 오프로딩은 새 세그먼트가 토픽 로그에 추가될 때 실행돼요. 네임스페이스에 임계값을 설정했지만 토픽에 생성되는 메시지가 적다면, 현재 세그먼트가 가득 차기 전까지 offloader는 동작하지 않아요.
pulsar-admin 같은 CLI 도구로 임계값 크기를 구성할 수 있어요.
broker.conf와 standalone.conf의 offload 구성은 네임스페이스 레벨 오프로드 정책이 없는 네임스페이스에 사용돼요. 각 네임스페이스는 고유한 offload 정책을 가질 수 있어요. 네임스페이스별 offload 정책을 설정하려면 pulsar-admin namespaces set-offload-policies options 명령을 사용해요.
예시 (Example)
이 예시는 pulsar-admin으로 AWS 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를 참고해요.
AWS S3 offloader를 수동으로 실행하도록 구성 (Configure AWS S3 offloader to run manually)
개별 토픽에 대해 다음 방법 중 하나로 AWS S3 offloader를 수동으로 트리거할 수 있어요.
- REST 엔드포인트 사용.
- CLI 도구(예: pulsar-admin) 사용.
CLI 도구로 트리거하려면 토픽에 대해 Pulsar 클러스터에 유지해야 하는 최대 데이터 양(임계값)을 지정해야 해요. Pulsar 클러스터의 토픽 데이터 크기가 이 임계값을 초과하면 임계값을 더 이상 초과하지 않을 때까지 토픽의 세그먼트가 AWS S3로 이동돼요. 더 오래된 세그먼트가 먼저 이동돼요.
예시 (Example)
- 이 예시는 pulsar-admin으로 AWS 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으로 AWS S3 offloader 상태를 확인해요.
bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
출력 (Output)
Offload is currently running
AWS 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를 참고해요.
튜토리얼 (Tutorial)
Pulsar에서 AWS S3 offloader를 사용하는 완전한 단계별 지침은 여기를 참고해요.
더 알아보기 (Learn more)
- 계층형 저장소 개요는 tiered-storage-overview 문서를 참고해요.
- S3 호환 API를 쓰는 경우 tiered-storage-s3 문서를 봐요.
- 구성 방법은 Tiered storage cookbook 문서를 살펴봐요.