Beralih antara Kafka dan Woodpecker
Halaman ini menjelaskan cara beralih antrian pesan (MQ) pada kluster Milvus antara Kafka (bawaan atau eksternal) dan Woodpecker (backend MinIO), baik ke arah mana pun. Untuk alur kerja umum dan prasyarat, lihat Beralih Antrian Pesan.
Persyaratan: Fitur Beralih MQ tersedia di Milvus 3.0 dan versi yang lebih baru. Perbarui instance Milvus Anda ke Milvus 3.0 atau versi yang lebih baru sebelum memulai — fitur ini tidak tersedia pada versi sebelumnya.
Mengganti antrian pesan adalah operasi berisiko tinggi. Pilih bagian yang sesuai dengan metode penerapan Anda — Dengan Helm atau Dengan Milvus Operator — dan ikuti langkah-langkahnya dari atas ke bawah. Jangan mencampurkan perintah Helm dan Operator.
Dengan Helm
Beralih dari Kafka ke Woodpecker (Helm)
Langkah 1: Pastikan instance Milvus sedang berjalan. Pastikan kluster Milvus Anda berjalan dengan baik — misalnya, dengan membuat koleksi uji, memasukkan data, dan menjalankan kueri.
Langkah 2: Jalankan peralihan MQ. Buka antarmuka manajemen MixCoord, lalu panggil API peralihan:
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
Di terminal lain:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
Langkah 3: Pastikan proses peralihan telah selesai.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Peralihan yang berhasil akan mencatat pesan " [mqTypeValue=woodpecker]".
Langkah 4: (Opsional) Hentikan Kafka dan bersihkan. Untuk Kafka bawaan, hapus pod Kafka dan PVC-nya. Untuk Kafka eksternal, bersihkan topik Milvus di instance Kafka eksternal — topik tersebut mengikuti format <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>.
Jika Anda berencana untuk beralih kembali ke Kafka nanti, bersihkan data/topik terlebih dahulu untuk menghindari konflik.
Beralih dari Woodpecker ke Kafka (Helm)
Langkah 1: Pastikan instance Milvus sedang berjalan.
Langkah 2: Konfigurasikan koneksi Kafka tujuan dan mulai ulang Milvus. Proses peralihan ini memerlukan Milvus untuk sudah mengetahui koneksi Kafka, jadi tuliskan koneksi tersebut ke user.yaml melalui extraConfigFiles dan terapkan dengan helm upgrade (yang akan me-roll pod-pod tersebut). streaming.enabled=true diperlukan untuk fitur Switch MQ. Untuk detail SASL/SSL, lihat Connect to Kafka with SASL/SSL.
# values.yaml
extraConfigFiles:
user.yaml: |+
kafka:
brokerList:
- <your_kafka_address>:<your_kafka_port>
saslUsername:
saslPassword:
saslMechanisms: PLAIN
securityProtocol: SASL_SSL
helm upgrade -i my-release zilliztech/milvus \
--set kafka.enabled=true \
--set woodpecker.enabled=false \
--set streaming.enabled=true \
-f values.yaml
Tunggu hingga semua pod siap, lalu pastikan konfigurasi akses Kafka telah diterapkan ke dalam konfigurasi Milvus.
Langkah 3: Jalankan peralihan MQ.
Pastikan Kafka tujuan tidak berisi topik Milvus dari konfigurasi sebelumnya. Jika ini adalah peralihan pertama Anda ke Kafka, abaikan catatan ini; jika tidak, bersihkan terlebih dahulu sisa topik Milvus dengan nama yang sama.
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
Di terminal lain:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "kafka"}'
Langkah 4: Verifikasi bahwa peralihan telah selesai.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Peralihan yang berhasil akan mencatat pesan " [mqTypeValue=kafka]".
Langkah 5: (Opsional) Bersihkan data Woodpecker. Hapus data Woodpecker di MinIO/S3 (di bawah <rootPath>/wp/..., biasanya files/wp/...) dan metadata Woodpecker di etcd (etcdctl get woodpecker --prefix). Jika Anda berencana untuk beralih kembali ke Woodpecker nanti, bersihkan file-file ini terlebih dahulu.
Dengan Milvus Operator
Beralih dari Kafka ke Woodpecker (Milvus Operator)
Langkah 1: Pastikan instance Milvus sedang berjalan.
Langkah 2: Jalankan peralihan MQ. Layanan MixCoord tidak terpapar, jadi jalankan API peralihan dari dalam pod MixCoord:
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
Langkah 3: Pastikan proses peralihan telah selesai.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Peralihan yang berhasil akan mencatat [mqTypeValue=woodpecker].
Langkah 4: Perbarui jenis MQ di Operator. Perbarui konfigurasi yang dikelola Operator agar Operator tidak membatalkan peralihan tersebut. Buat change_configmap.yaml:
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
dependencies:
msgStreamType: woodpecker
kubectl patch -f change_configmap.yaml --patch-file change_configmap.yaml --type merge
Langkah 5: (Opsional) Hentikan Kafka dan bersihkan. Untuk Kafka bawaan, hapus pod Kafka dan PVC-nya. Untuk Kafka eksternal, bersihkan topik Milvus (format <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>).
Beralih dari Woodpecker ke Kafka (Operator Milvus)
Langkah 1: Pastikan instance Milvus sedang berjalan.
Langkah 2: Konfigurasikan koneksi Kafka tujuan dan mulai ulang Milvus. Tempatkan koneksi Kafka di bawah spec.config (Operator mengubah spec.config menjadi user.yaml) dan atur jenis MQ; penerapan CR akan memperbarui pod dengan konfigurasi baru. Untuk detail SASL/SSL, lihat Menghubungkan ke Kafka dengan SASL/SSL.
# change_configmap.yaml
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
config:
kafka:
brokerList:
- <your_kafka_address>:<your_kafka_port>
saslUsername:
saslPassword:
saslMechanisms: PLAIN
securityProtocol: SASL_SSL
dependencies:
msgStreamType: kafka
kubectl patch -f change_configmap.yaml --patch-file change_configmap.yaml --type merge
Tunggu hingga semua pod siap, lalu pastikan konfigurasi akses Kafka telah diterapkan ke konfigurasi Milvus.
Langkah 3: Jalankan peralihan MQ.
Pastikan Kafka tujuan tidak berisi topik Milvus dari konfigurasi sebelumnya. Jika ini adalah peralihan pertama Anda ke Kafka, abaikan catatan ini; jika tidak, bersihkan terlebih dahulu topik Milvus sisa dengan nama yang sama.
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "kafka"}'
Langkah 4: Verifikasi bahwa peralihan telah selesai.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Peralihan yang berhasil akan mencatat pesan " [mqTypeValue=kafka]".
Langkah 5: (Opsional) Bersihkan data Woodpecker. Hapus data Woodpecker di MinIO/S3 (di bawah <rootPath>/wp/..., biasanya files/wp/...) dan metadata Woodpecker di etcd (etcdctl get woodpecker --prefix). Jika Anda berencana beralih kembali ke Woodpecker nanti, bersihkan file-file ini terlebih dahulu.
Skenario yang didukung
| MQ Sumber | MQ Tujuan | Helm | Operator Milvus |
|---|---|---|---|
| Kafka bawaan | Woodpecker (MinIO) | Didukung | Didukung |
| Kafka Eksternal | Woodpecker (MinIO) | Didukung | Didukung |
| Woodpecker (MinIO) | Kafka Eksternal | Didukung | Didukung |
| Kafka | Woodpecker (lokal) | Didukung tetapi tidak direkomendasikan (semua pod memerlukan sistem file bersama) | Tidak didukung |