milvus-logo
LFAI
홈페이지
  • 관리 가이드
    • 종속성 관리

Milvus 운영자로 메시지 저장소 구성하기

Milvus는 최근 변경 사항 로그 관리, 스트림 로그 출력, 로그 구독 제공을 위해 RocksMQ, Pulsar 또는 Kafka를 사용합니다. 이 항목에서는 Milvus Operator와 함께 Milvus를 설치할 때 메시지 저장소 종속성을 구성하는 방법을 소개합니다. 자세한 내용은 Milvus Operator 리포지토리에서 Milvus Operator로 메시지 저장소 구성을 참조하세요.

이 항목에서는 Milvus Operator를 배포했다고 가정합니다.

자세한 내용은 Milvus 운영자 배포하기를 참조하세요.

밀버스 오퍼레이터를 사용하여 밀버스 클러스터를 시작하려면 구성 파일을 지정해야 합니다.

kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_default.yaml

타사 종속성을 구성하려면 milvus_cluster_default.yaml 에서 코드 템플릿을 편집하기만 하면 됩니다. 다음 섹션에서는 각각 개체 스토리지, etcd 및 Pulsar를 구성하는 방법을 소개합니다.

시작하기 전에

아래 표는 Milvus 독립형 및 클러스터 모드에서 RocksMQ, NATS, Pulsar 및 Kafka가 지원되는지 여부를 보여줍니다.

RocksMQNATSPulsarKafka
독립 실행형 모드✔️✔️✔️✔️
클러스터 모드✖️✖️✔️✔️

메시지 저장소를 지정하는 데에는 다른 제한 사항도 있습니다:

  • 하나의 Milvus 인스턴스에 대해 하나의 메시지 저장소만 지원됩니다. 그러나 하나의 인스턴스에 대해 여러 개의 메시지 저장소를 설정할 수 있는 이전 버전과의 호환성은 여전히 유지됩니다. 우선순위는 다음과 같습니다:
    • 독립형 모드: RocksMQ(기본값) > Pulsar > Kafka
    • 클러스터 모드: Pulsar(기본값) > Kafka
    • 2.3에 도입된 Nats는 이전 버전과의 호환성을 위해 이러한 우선순위 규칙에 포함되지 않습니다.
  • Milvus 시스템이 실행되는 동안에는 메시지 저장소를 변경할 수 없습니다.
  • Kafka 2.x 또는 3.x 버전만 지원됩니다.

RocksMQ 구성

RocksMQ는 Milvus 스탠드얼론의 기본 메시지 저장소입니다.

현재 Milvus Operator를 통해서만 Milvus 스탠드얼론의 메시지 저장소로 RocksMQ를 구성할 수 있습니다.

예제

다음 예는 RocksMQ 서비스를 구성하는 예제입니다.

apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
  name: milvus
spec:
  dependencies: {}
  components: {}
  config: {}

NATS 구성하기

NATS는 NATS의 대체 메시지 저장소입니다.

예제

다음 예는 NATS 서비스를 구성하는 예제입니다.

apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
  name: milvus
spec:
  dependencies: 
    msgStreamType: 'natsmq'
    natsmq:
      # server side configuration for natsmq.
      server: 
        # 4222 by default, Port for nats server listening.
        port: 4222 
        # /var/lib/milvus/nats by default, directory to use for JetStream storage of nats.
        storeDir: /var/lib/milvus/nats 
        # (B) 16GB by default, Maximum size of the 'file' storage.
        maxFileStore: 17179869184 
        # (B) 8MB by default, Maximum number of bytes in a message payload.
        maxPayload: 8388608 
        # (B) 64MB by default, Maximum number of bytes buffered for a connection applies to client connections.
        maxPending: 67108864 
        # (√ms) 4s by default, waiting for initialization of natsmq finished.
        initializeTimeout: 4000 
        monitor:
          # false by default, If true enable debug log messages.
          debug: false 
          # true by default, If set to false, log without timestamps.
          logTime: true 
          # no log file by default, Log file path relative to.. .
          logFile: 
          # (B) 0, unlimited by default, Size in bytes after the log file rolls over to a new one.
          logSizeLimit: 0 
        retention:
          # (min) 3 days by default, Maximum age of any message in the P-channel.
          maxAge: 4320 
          # (B) None by default, How many bytes the single P-channel may contain. Removing oldest messages if the P-channel exceeds this size.
          maxBytes:
          # None by default, How many message the single P-channel may contain. Removing oldest messages if the P-channel exceeds this limit.    
          maxMsgs: 
  components: {}
  config: {}

메시지 저장소를 RocksMQ에서 NATS로 마이그레이션하려면 다음과 같이 하세요:

  1. 모든 DDL 작업을 중지합니다.

  2. FlushAll API를 호출한 다음 API 호출 실행이 완료되면 Milvus를 중지합니다.

  3. msgStreamTypenatsmq 으로 변경하고 spec.dependencies.natsmq 에서 NATS 설정에 필요한 사항을 변경합니다.

  4. Milvus를 다시 시작하고 여부를 확인합니다:

    • mqType=natsmq 이라는 로그 항목이 로그에 존재합니다.
    • spec.dependencies.natsmq.server.storeDir 에 지정된 디렉터리에 jetstream 라는 디렉터리가 존재합니다.
  5. (선택 사항) RocksMQ 스토리지 디렉토리에 있는 데이터 파일을 백업하고 정리합니다.

RocksMQ와 NATS 중 어떤 것을 선택해야 하나요?

RockMQ는 CGO를 사용하여 RocksDB와 상호 작용하고 자체적으로 메모리를 관리하는 반면, Milvus 설치에 내장된 순수-GO NATS는 메모리 관리를 Go의 가비지 컬렉터(GC)에 위임합니다.

데이터 패킷이 64KB보다 작은 시나리오에서는 메모리 사용량, CPU 사용량, 응답 시간 측면에서 RocksDB가 더 나은 성능을 보입니다. 반면 데이터 패킷이 64KB보다 큰 경우, 충분한 메모리와 이상적인 GC 스케줄링으로 응답 시간 측면에서 NATS가 우수합니다.

현재 NATS는 실험용으로만 사용하는 것이 좋습니다.

Pulsar 구성

Pulsar는 최근 변경 사항의 로그를 관리하고, 스트림 로그를 출력하며, 로그 구독을 제공합니다. 메시지 저장을 위한 Pulsar 구성은 Milvus 독립형과 Milvus 클러스터 모두에서 지원됩니다. 그러나 Milvus Operator를 사용할 때는 Milvus 클러스터의 메시지 저장소로만 Pulsar를 구성할 수 있습니다. spec.dependencies.pulsar 에서 필수 필드를 추가하여 Pulsar를 구성하세요.

pulsar externalinCluster 을 지원합니다.

외부 펄서

external 는 외부 Pulsar 서비스를 사용함을 나타냅니다. 외부 Pulsar 서비스를 구성하는 데 사용되는 필드는 다음과 같습니다:

  • external: true 값은 Milvus가 외부 Pulsar 서비스를 사용함을 나타냅니다.
  • endpoints: Pulsar의 엔드포인트입니다.

예제

다음은 외부 Pulsar 서비스를 구성하는 예제입니다.

apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
  name: my-release
  labels:
    app: milvus
spec:
  dependencies: # Optional
    pulsar: # Optional
      # Whether (=true) to use an existed external pulsar as specified in the field endpoints or 
      # (=false) create a new pulsar inside the same kubernetes cluster for milvus.
      external: true # Optional default=false
      # The external pulsar endpoints if external=true
      endpoints:
      - 192.168.1.1:6650
  components: {}
  config: {}           

내부 펄서

inCluster 는 Milvus 클러스터가 시작되면 클러스터에서 Pulsar 서비스가 자동으로 시작됨을 나타냅니다.

예제

다음은 내부 Pulsar 서비스를 구성하는 예제입니다.

apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
  name: my-release
  labels:
    app: milvus
spec:
  dependencies:
    pulsar:
      inCluster:
        values:
          components:
            autorecovery: false
          zookeeper:
            replicaCount: 1
          bookkeeper:
            replicaCount: 1
            resoureces:
              limit:
                cpu: '4'
              memory: 8Gi
            requests:
              cpu: 200m
              memory: 512Mi
          broker:
            replicaCount: 1
            configData:
              ## Enable `autoSkipNonRecoverableData` since bookkeeper is running
              ## without persistence
              autoSkipNonRecoverableData: "true"
              managedLedgerDefaultEnsembleSize: "1"
              managedLedgerDefaultWriteQuorum: "1"
              managedLedgerDefaultAckQuorum: "1"
          proxy:
            replicaCount: 1
  components: {}
  config: {}            
이 예에서는 Pulsar의 각 구성 요소의 복제본 수, Pulsar BookKeeper의 컴퓨팅 리소스 및 기타 구성을 지정합니다.
내부 Pulsar 서비스를 구성하기 위한 전체 구성 항목은 values.yaml에서 찾을 수 있습니다. 앞의 예와 같이 pulsar.inCluster.values 아래에 필요에 따라 구성 항목을 추가합니다.

구성 파일의 이름이 milvuscluster.yaml 이라고 가정하고 다음 명령을 실행하여 구성을 적용합니다.

kubectl apply -f milvuscluster.yaml

Kafka 구성

Pulsar는 Milvus 클러스터의 기본 메시지 저장소입니다. Kafka를 사용하려면 선택적 필드 msgStreamType 를 추가하여 Kafka를 구성합니다.

kafka externalinCluster 을 지원합니다.

외부 카프카

external 는 외부 Kafka 서비스를 사용함을 나타냅니다.

외부 Kafka 서비스를 구성하는 데 사용되는 필드는 다음과 같습니다:

  • external: true 값은 Milvus가 외부 Kafka 서비스를 사용함을 나타냅니다.
  • brokerList: 메시지를 전송할 브로커 목록입니다.

예제

다음은 외부 Kafka 서비스를 구성하는 예제입니다.

apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
  name: my-release
  labels:
    app: milvus
spec:
  config:
    kafka:
      # securityProtocol supports: PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL 
      securityProtocol: PLAINTEXT
      # saslMechanisms supports: PLAIN, SCRAM-SHA-256, SCRAM-SHA-512
      saslMechanisms: PLAIN
      saslUsername: ""
      saslPassword: ""
  # Omit other fields ...
  dependencies:
    # Omit other fields ...
    msgStreamType: "kafka"
    kafka:
      external: true
      brokerList: 
        - "kafkaBrokerAddr1:9092"
        - "kafkaBrokerAddr2:9092"
        # ...

SASL 구성은 운영자 v0.8.5 이상 버전에서 지원됩니다.

내부 카프카

inCluster 는 Milvus 클러스터가 시작되면 클러스터에서 Kafka 서비스가 자동으로 시작됨을 나타냅니다.

예제

다음 예는 내부 Kafka 서비스를 구성하는 예제입니다.

apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
  name: my-release
  labels:
    app: milvus
spec: 
  dependencies:
    msgStreamType: "kafka"
    kafka:
      inCluster: 
        values: {} # values can be found in https://artifacthub.io/packages/helm/bitnami/kafka
  components: {}
  config: {}

내부 Kafka 서비스 구성을 위한 전체 구성 항목은 여기에서 확인할 수 있습니다. kafka.inCluster.values 에서 필요에 따라 구성 항목을 추가합니다.

구성 파일의 이름이 milvuscluster.yaml 이라고 가정하고 다음 명령을 실행하여 구성을 적용합니다.

kubectl apply -f milvuscluster.yaml

다음 단계

Milvus Operator로 다른 Milvus 종속 요소를 구성하는 방법을 알아보세요:

번역DeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
피드백

이 페이지가 도움이 되었나요?