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:2181
    • zkLedgersRootPath → 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에서 발생할 수 있어요.

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 문서를 참고해요.