Mengonfigurasi Penyimpanan Pesan dengan Operator Milvus
Milvus menggunakan RocksMQ, Pulsar, atau Kafka untuk mengelola log perubahan terbaru, mengeluarkan log aliran, dan menyediakan langganan log. Topik ini memperkenalkan cara mengonfigurasi ketergantungan penyimpanan pesan ketika Anda menginstal Milvus dengan Milvus Operator. Untuk detail lebih lanjut, lihat Mengonfigurasi Penyimpanan Pesan dengan Milvus Operator di repositori Milvus Operator.
Topik ini mengasumsikan bahwa Anda telah men-deploy Milvus Operator.
Anda perlu menentukan file konfigurasi untuk menggunakan Milvus Operator untuk memulai cluster Milvus.
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_default.yaml
Anda hanya perlu mengedit template kode di milvus_cluster_default.yaml
untuk mengonfigurasi dependensi pihak ketiga. Bagian berikut ini memperkenalkan cara mengonfigurasi penyimpanan objek, etcd, dan Pulsar.
Sebelum Anda mulai
Tabel di bawah ini menunjukkan apakah RocksMQ, NATS, Pulsar, dan Kafka didukung dalam mode mandiri dan klaster Milvus.
RocksMQ | NATS | Pulsar | Kafka | |
---|---|---|---|---|
Mode mandiri | ✔️ | ✔️ | ✔️ | ✔️ |
Mode cluster | ✖️ | ✖️ | ✔️ | ✔️ |
Ada juga batasan lain untuk menentukan penyimpanan pesan:
- Hanya satu penyimpanan pesan untuk satu instance Milvus yang didukung. Namun kami masih memiliki kompatibilitas ke belakang dengan beberapa penyimpanan pesan yang ditetapkan untuk satu instance. Prioritasnya adalah sebagai berikut:
- mode mandiri: RocksMQ (default) > Pulsar > Kafka
- mode cluster: Pulsar (default) > Kafka
- Nats yang diperkenalkan di 2.3 tidak berpartisipasi dalam aturan prioritas ini untuk kompatibilitas ke belakang.
- Penyimpanan pesan tidak dapat diubah ketika sistem Milvus sedang berjalan.
- Hanya versi Kafka 2.x atau 3.x yang didukung.
Mengkonfigurasi RocksMQ
RocksMQ adalah penyimpanan pesan default pada Milvus mandiri.
Saat ini, Anda hanya dapat mengonfigurasi RocksMQ sebagai penyimpanan pesan untuk Milvus standalone dengan Milvus Operator.
Contoh
Contoh berikut ini mengonfigurasi layanan 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: {}
Opsi konfigurasi utama:
msgStreamType
: rocksmq: Secara eksplisit menetapkan RocksMQ sebagai antrean pesanpersistence.enabled
: Mengaktifkan penyimpanan persisten untuk data RocksMQpersistence.pvcDeletion
: Jika benar, PVC akan dihapus ketika instans Milvus dihapuspersistentVolumeClaim.spec
: Spesifikasi PVC Kubernetes standaraccessModes
: BiasanyaReadWriteOnce
untuk penyimpanan blokstorageClassName
: Kelas penyimpanan cluster Andastorage
: Ukuran volume persisten
Mengkonfigurasi NATS
NATS adalah penyimpanan pesan alternatif untuk NATS.
Contoh
Contoh berikut ini mengonfigurasi layanan 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: {}
Untuk memigrasikan penyimpanan pesan dari RocksMQ ke NATS, lakukan hal berikut:
Hentikan semua operasi DDL.
Panggil API FlushAll dan kemudian hentikan Milvus setelah panggilan API selesai dieksekusi.
Ubah
msgStreamType
menjadinatsmq
dan lakukan perubahan yang diperlukan pada pengaturan NATS dispec.dependencies.natsmq
.Jalankan Milvus lagi dan periksa apakah:
- Entri log yang bertuliskan
mqType=natsmq
ada pada log. - Direktori bernama
jetstream
ada di direktori yang ditentukan dispec.dependencies.natsmq.server.storeDir
.
- Entri log yang bertuliskan
(Opsional) Cadangkan dan bersihkan berkas data dalam direktori penyimpanan RocksMQ.
Pilih antara RocksMQ dan NATS?
RockMQ menggunakan CGO untuk berinteraksi dengan RocksDB dan mengelola memori dengan sendirinya, sementara NATS murni-GO yang tertanam dalam instalasi Milvus mendelegasikan manajemen memorinya ke pengumpul sampah Go (GC).
Dalam skenario di mana paket data lebih kecil dari 64 kb, RocksDB mengungguli dalam hal penggunaan memori, penggunaan CPU, dan waktu respons. Di sisi lain, jika paket data lebih besar dari 64 kb, NATS unggul dalam hal waktu respons dengan memori yang cukup dan penjadwalan GC yang ideal.
Saat ini, Anda disarankan untuk menggunakan NATS hanya untuk eksperimen.
Mengkonfigurasi Pulsar
Pulsar mengelola log perubahan terbaru, mengeluarkan log aliran, dan menyediakan langganan log. Mengkonfigurasi Pulsar untuk penyimpanan pesan didukung pada Milvus mandiri dan Milvus cluster. Namun, dengan Milvus Operator, Anda hanya dapat mengonfigurasi Pulsar sebagai penyimpanan pesan untuk Milvus cluster. Tambahkan bidang yang diperlukan di bawah spec.dependencies.pulsar
untuk mengkonfigurasi Pulsar.
pulsar
Milvus Operator mendukung external
dan inCluster
.
Pulsar eksternal
external
menunjukkan penggunaan layanan Pulsar eksternal. Bidang yang digunakan untuk mengkonfigurasi layanan Pulsar eksternal meliputi:
external
: Nilaitrue
menunjukkan bahwa Milvus menggunakan layanan Pulsar eksternal.endpoints
: Titik akhir Pulsar.
Contoh
Contoh berikut ini mengonfigurasi layanan Pulsar eksternal.
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 internal
inCluster
menunjukkan ketika kluster Milvus dimulai, layanan Pulsar dimulai secara otomatis di dalam kluster.
Contoh
Contoh berikut ini mengonfigurasi layanan Pulsar internal.
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
seperti yang ditunjukkan pada contoh sebelumnya.Dengan asumsi bahwa berkas konfigurasi bernama milvuscluster.yaml
, jalankan perintah berikut untuk menerapkan konfigurasi.
kubectl apply -f milvuscluster.yaml
Mengkonfigurasi Kafka
Pulsar adalah penyimpanan pesan default dalam cluster Milvus. Jika Anda ingin menggunakan Kafka, tambahkan bidang opsional msgStreamType
untuk mengkonfigurasi Kafka.
kafka
Kafka mendukung external
dan inCluster
.
Kafka eksternal
external
mengindikasikan penggunaan layanan Kafka eksternal.
Bidang yang digunakan untuk mengonfigurasi layanan Kafka eksternal meliputi:
external
: Nilaitrue
menunjukkan bahwa Milvus menggunakan layanan Kafka eksternal.brokerList
: Daftar broker yang akan dikirimi pesan.
Contoh
Contoh berikut ini mengonfigurasi layanan Kafka eksternal.
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"
# ...
Konfigurasi SASL didukung dalam operator v0.8.5 atau versi yang lebih tinggi.
Kafka internal
inCluster
menunjukkan ketika cluster Milvus dimulai, layanan Kafka dimulai secara otomatis dalam cluster.
Contoh
Contoh berikut ini mengonfigurasi layanan Kafka internal.
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: {}
Temukan item konfigurasi lengkap untuk mengonfigurasi layanan Kafka internal di sini. Tambahkan item konfigurasi sesuai kebutuhan di kafka.inCluster.values
.
Dengan asumsi bahwa berkas konfigurasi bernama milvuscluster.yaml
, jalankan perintah berikut untuk menerapkan konfigurasi.
kubectl apply -f milvuscluster.yaml
Selanjutnya
Pelajari cara mengonfigurasi dependensi Milvus lainnya dengan Milvus Operator: