使用 Milvus Operator 配置消息存储
Milvus 使用 RocksMQ、Pulsar 或 Kafka 来管理最新变更日志、输出流日志并提供日志订阅服务。本主题介绍在使用 Milvus Operator 安装 Milvus 时如何配置消息存储依赖项。更多详细信息,请参阅 Milvus Operator 存储库中的《使用 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 Standalone 和集群模式下是否支持 RocksMQ、Pulsar、Kafka 和 Woodpecker。
| RocksMQ | Pulsar | Kafka | Woodpecker | |
|---|---|---|---|---|
| 独立模式 | ✔️ | ✔️ | ✔️ | ✔️ |
| 集群模式 | ✖️ | ✔️ | ✔️ | ✔️ |
指定消息存储时还存在其他限制:
- 每个 Milvus 实例仅支持一个消息存储。不过,对于同一实例配置多个消息存储的情况,我们仍保持向后兼容性。优先级如下:
- 独立模式:RocksMQ(默认) > Pulsar > Kafka
- 集群模式:Pulsar(默认) > Kafka
- Milvus 系统运行期间无法更改消息存储。
- 仅支持 Kafka 2.x 或 3.x 版本。
- 升级限制:消息队列限制:升级至 Milvus v2.6.19 时,必须保留当前选择的消息队列。升级过程中不支持在不同的消息队列系统之间切换。未来版本将支持更改消息队列系统。
配置 RocksMQ
RocksMQ 是 Milvus Standalone 部署模式下的默认消息存储。
目前,您只能通过 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 时,在删除 Milvus 实例时将一并删除 PVCpersistentVolumeClaim.spec: 标准的 Kubernetes PVC 规范accessModes: 通常用于块存储时为ReadWriteOncestorageClassName: 您的集群的存储类storage: 持久卷的大小
配置 Woodpecker
Woodpecker 是一款专为对象存储设计的云原生预写日志(WAL)。它具有高吞吐量、低操作开销和无缝可扩展性。更多详细信息,请参阅《使用 Woodpecker》。
配置 Pulsar
Pulsar 管理最近的变更日志、输出流日志并提供日志订阅。在 Milvus Standalone 和 Milvus 集群模式下,均支持将 Pulsar 配置为消息存储。但若使用 Milvus Operator,则仅可在 Milvus 集群中将 Pulsar 配置为消息存储。请在 `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值为 1 表示 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"
# ...
Operator 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 依赖项: