🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
主頁
  • 管理指南
    • 管理相依性
  • Home
  • Docs
  • 管理指南

  • 管理相依性

  • 與 Milvus 操作員

  • 訊息儲存

使用 Milvus Operator 設定訊息儲存

Milvus 使用 RocksMQ、Pulsar 或 Kafka 來管理最近變更的日誌、輸出串流日誌,以及提供日誌訂閱。本主題介紹如何在使用 Milvus Operator 安裝 Milvus 時,設定訊息儲存的依賴性。如需詳細資訊,請參閱 Milvus Operator 資源庫中的Configure Message Storage with Milvus Operator

本主題假設您已部署 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。

RocksMQNATSPulsar卡夫卡
單機模式✔️✔️✔️✔️
叢集模式✖️✖️✔️✔️

指定訊息儲存也有其他限制:

  • 一個 Milvus 實例只支援一個訊息儲存空間。然而,我們仍然向後相容為一個實例設定多個訊息儲存空間。優先順序如下:
    • 獨立模式: RocksMQ (預設) > Pulsar > Kafka
    • 群集模式:Pulsar (預設) > Kafka
    • 為了向下相容性,2.3 引入的 Nats 不參與這些優先順序規則。
  • 當 Milvus 系統在執行時,訊息儲存是無法改變的。
  • 只支援 Kafka 2.x 或 3.x 版本。

設定 RocksMQ

RocksMQ 是 Milvus 單機版的預設訊息儲存空間。

目前,你只能透過 Milvus Operator 設定 RocksMQ 為 Milvus standalone 的訊息儲存空間。

範例

下面的例子配置了一個 RocksMQ 服務。

apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
  name: milvus
spec:
  mode: standalone
  dependencies:
    msgStreamType: rocksmq
    rocksmq:
      persistence:
        enabled: true
        pvcDeletion: true
        persistentVolumeClaim:
          spec:
            accessModes: ["ReadWriteOnce"]
            storageClassName: "local-path"  # Specify your storage class
            resources:
              requests:
                storage: 10Gi  # Specify your desired storage size
  components: {}
  config: {}
主要配置選項:
  • msgStreamType: rocksmq: 明確設定 RocksMQ 為訊息佇列。
  • persistence.enabled:啟用 RocksMQ 資料的持久化儲存。
  • persistence.pvcDeletion:當設定為 true 時,PVC 會在 Milvus 刪除時被刪除。
  • persistentVolumeClaim.spec:標準 Kubernetes PVC 規格
  • accessModes:通常ReadWriteOnce 用於區塊儲存
  • storageClassName:您集群的儲存類別
  • storage:持久卷的大小

配置 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. msgStreamType 改為natsmq ,並在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)。

在資料封包小於 64 kb 的情況下,RocksDB 在記憶體使用量、CPU 使用量和回應時間上都比較優勝。另一方面,如果資料封包大於 64 kb,NATS 在有足夠記憶體和理想 GC 排程的情況下,在回應時間上表現優異。

目前,建議您僅在實驗中使用 NATS。

設定 Pulsar

Pulsar 管理最近變更的日誌、輸出串流日誌,並提供日誌訂閱。Milvus 獨立版和 Milvus 集群都支援配置 Pulsar 作訊息儲存。然而,使用 Milvus Operator,您只能設定 Pulsar 為 Milvus 叢集的訊息儲存。添加spec.dependencies.pulsar 下的必填欄位以配置 Pulsar。

pulsar 支援 和 。external inCluster

外部 Pulsar

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: {}           

內部 Pulsar

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 的計算資源,以及其他配置。
values.yaml 中找到配置內部 Pulsar 服務的完整配置項目。如前面的範例所示,在pulsar.inCluster.values 下依需要加入設定項目。

假設設定檔名為milvuscluster.yaml ,執行下列指令套用設定。

kubectl apply -f milvuscluster.yaml

配置 Kafka

Pulsar 是 Milvus 叢集的預設訊息儲存空間。如果要使用 Kafka,請加入可選欄位msgStreamType 來設定 Kafka。

kafka 支援 和 。external inCluster

外部 Kafka

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"
        # ...

操作員 v0.8.5 或更高版本支援 SASL 配置。

內部 Kafka

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 依賴項目:

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?