BookKeeper 메타데이터 구성
BookKeeper 메타데이터 구성 (metadataServiceUri)
BookKeeper는 레저 메타데이터를 어디에 저장할지 알아야 해요. 그래야 서로 다른 랙에 데이터를 배치할 수 있으니까요(rack-awareness). 이것이 구성되는 세 가지 주요 방법이 있으며, 어느 것을 사용하느냐에 따라 동작이 달라져요.
출처: 문서
본문
BookKeeper는 레저 메타데이터를 어디에 저장할지 알아야 해요. 그래야 서로 다른 랙에 데이터를 배치할 수 있으니까요(rack-awareness). 이것이 구성되는 세 가지 주요 방법이 있으며, 어느 것을 사용하느냐에 따라 동작이 달라져요.
1. 기본 동작 — 아무것도 구성하지 않을 때 (Default Behavior — When You Don't Configure Anything)
bookkeeper.conf에서 metadataServiceUri를 빼면:
- BookKeeper는 이전 구성들을 찾아요:
zkServers→ ZooKeeper 호스트 목록, 예:zk1:2181,zk2:2181,zk3:2181zkLedgersRootPath→ BookKeeper 메타데이터가 ZooKeeper에 저장되는 위치, 예:/ledgers
- 찾으면 BookKeeper는 내부적으로 이 옛 스타일 URI를 자동으로 만드는데:
- 보통
zk+hierarchical://zk1:2181,zk2:2181,zk3:2181/ledgers - 하지만 layout 유형이 설정되지 않았다면
zk+null://zk1:2181,zk2:2181,zk3:2181/ledgers일 수 있어요.
- 보통
- layout 유형이 없거나 명시적으로
metadataServiceUri=zk+hierarchical://...를 사용하면:- BookKeeper는 이런 경고를 로그할 수 있어요:
Failed to initialize DNS Resolver org.apache.pulsar.zookeeper.ZkBookieRackAffinityMapping, used default subnet resolver because METADATA_STORE_INSTANCE failed to init BookieId list - 이 URI 형식은 동작하지만 rack-awareness를 깨뜨릴 수 있어요(Pulsar issue #24455)
- 경고는
metadataServiceUri=zk+hierarchical://...가 사용될 때만 발생해요. - 이것은 Pulsar 3.x 또는 4.x에서 발생할 수 있어요.
- BookKeeper는 이런 경고를 로그할 수 있어요:
2. 레거시 명시적 ZooKeeper 구성 (비권장이지만 여전히 동작) (Legacy Explicit ZooKeeper Config (Deprecated but Still Works))
이전 설정에는 metadataServiceUri가 없었어요. 대신 다음을 사용했어요.
zkServers=zk1:2181,zk2:2181,zk3:2181 zkLedgersRootPath=/ledgers |
|---|
BookKeeper는 하위 호환성을 위해 여전히 이것을 지원하지만, 기본적으로 위 "기본" 동작과 같아요 — 내부적으로 다음으로 끝나요.
zk+null://zk1:2181,zk2:2181,zk3:2181/ledgers |
|---|
(layout 유형이 지정되면 때로 zk+hierarchical://zk1:2181,zk2:2181,zk3:2181/ledgers)
- Pulsar 3.x와 4.x에서 여전히 동작해요.
- 이 스타일을 사용할 때
zkLedgersRootPath를 설정해야 해요. - 이것은 "이전" 방식이에요 — 하위 호환성만을 위해 유지돼요.
- Pulsar의 새 기능은 이 모드에서 완전히 테스트되지 않을 수 있으므로 마이그레이션을 계획하세요.
3. 메타데이터 서비스 URI (권장) (Metadata Service URI (Preferred))
새 클러스터에는 Oxia가 권장 메타데이터 스토어예요. BookKeeper를 Pulsar 메타데이터 스토어와 분리된 자체 Oxia 네임스페이스(Pulsar Helm chart는 bookkeeper를 사용)로 가리켜요.
metadataServiceUri=metadata-store:oxia://oxia-1.example.com:6648/bookkeeper |
|---|
metadata-store: 접두사가 필요하며 형식이 Pulsar의 metadataStoreUrl과 달라요. 브로커의 conf/broker.conf에 있는 bookkeeperMetadataServiceUri도 이 같은 값으로 설정해야 해요.
또는 ZooKeeper를 메타데이터 스토어로 사용하면, 올바르고 작동하는 설정(OSS Pulsar 4.x 테스트에서)은 다음과 같아요.
metadataServiceUri=metadata-store:zk:pulsar-mini-zookeeper:2181 zkLedgersRootPath=/ledgers zkServers= |
|---|
- Pulsar 3.x와 4.x에서 rack-awareness와 함께 올바르게 동작해요.
- 대부분의 Pulsar 3.x와 4.x 배포에서는 올바른 메타데이터 드라이버가 이미 활성화되어 있지만, 필요하다면 다음을 설정해요.
-Dbookkeeper.metadata.client.drivers=org.apache.pulsar.metadata.bookkeeper.PulsarMetadataClientDriver -Dbookkeeper.metadata.bookie.drivers=org.apache.pulsar.metadata.bookkeeper.PulsarMetadataBookieDriver |
|---|
이 형식은 피하세요 (Avoid this format)
metadataServiceUri=zk+hierarchical://zk1:2181,zk2:2181,zk3:2181/ledgers |
|---|
- 이는 Pulsar 3.x와 4.x에서 이 형식으로 rack-awareness가 실패할 수 있기 때문이에요.
- 알려진 버그이며 Pulsar #24426을 참고해요.
metadata-store:zk:를 사용하세요.
요약 (Summary)
항상 bookkeeper.conf에서 metadataServiceUri를 설정해요. 새 클러스터에는 Oxia가 권장 메타데이터 스토어예요.
metadataServiceUri=metadata-store:oxia://oxia-1.example.com:6648/bookkeeper |
|---|
ZooKeeper와 함께:
metadataServiceUri=metadata-store:zk:zk1:2181,zk2:2181,zk3:2181/ledgers |
|---|
- → 이것이 현대적이고 신뢰할 수 있는 방법이에요. Pulsar 3.x와 4.x에서 rack-awareness와 잘 동작해요.
- 설정하지 않으면 BookKeeper는:
- 이전 구성
zkServers+zkLedgersRootPath를 확인해요. - "경고/실패"는
metadataServiceUri=zk+hierarchical://...일 때만 발생하며 레거시zkServers에서는 발생하지 않아요. - → 이것은 Pulsar 3.x와 4.x에서 rack-awareness를 깨뜨릴 수 있어요.
- 이전 구성
더 알아보기 (Learn more)
- 메타데이터 스토어 구성 전반은 Configure metadata store 문서를 참고해요.
- BookKeeper 부키 구성은 Metadata store and BookKeeper administration 문서를 참고해요.
- Oxia 배포 지침은 Oxia 문서를 참고해요.
- 랙 인식 배치 정책은 Isolate bookies 문서를 참고해요.