使用 Milvus Operator 設定訊息儲存
Milvus 使用 RocksMQ、Pulsar 或 Kafka 來管理最近變更的日誌、輸出串流日誌,以及提供日誌訂閱。本主題介紹如何在使用 Milvus Operator 安裝 Milvus 時,設定訊息儲存的依賴性。如需詳細資訊,請參閱 Milvus Operator 資源庫中的Configure Message Storage with 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。
RocksMQ | NATS | Pulsar | 卡夫卡 | |
---|---|---|---|---|
單機模式 | ✔️ | ✔️ | ✔️ | ✔️ |
叢集模式 | ✖️ | ✖️ | ✔️ | ✔️ |
指定訊息儲存也有其他限制:
- 一個 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,步驟如下:
停止所有 DDL 操作。
调用 FlushAll API,然后在 API 调用执行完毕后停止 Milvus。
將
msgStreamType
改為natsmq
,並在spec.dependencies.natsmq
中對 NATS 設定進行必要的修改。再次啟動 Milvus 並檢查是否:
- 日誌中是否有讀取
mqType=natsmq
的日誌項目。 - 在
spec.dependencies.natsmq.server.storeDir
中指定的目錄中是否存在名為jetstream
的目錄。
- 日誌中是否有讀取
(可選)備份並清理 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.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 依賴項目: