Wechsel zwischen Kafka und Woodpecker
Auf dieser Seite wird beschrieben, wie Sie die Nachrichtenwarteschlange (MQ) eines Milvus-Clusters in beide Richtungen zwischen Kafka (integriert oder extern) und Woodpecker (MinIO-Backend) umschalten können. Informationen zum allgemeinen Arbeitsablauf und zu den Voraussetzungen finden Sie unter „Nachrichtenwarteschlange umschalten“.
Voraussetzung: Die Funktion „Switch MQ“ ist ab Milvus 3.0 verfügbar. Aktualisieren Sie Ihre Milvus-Instanz auf Milvus 3.0 oder höher, bevor Sie beginnen – die Funktion ist in früheren Versionen nicht verfügbar.
Das Umschalten der Nachrichtenwarteschlange ist ein risikoreicher Vorgang. Wählen Sie den Abschnitt aus, der Ihrer Bereitstellungsmethode entspricht – „Mit Helm“ oder „Mit Milvus Operator“ – und befolgen Sie die Anweisungen von oben nach unten. Mischen Sie keine Helm- und Operator-Befehle.
Mit Helm
Wechsel von Kafka zu Woodpecker (Helm)
Schritt 1: Überprüfen Sie, ob die Milvus-Instanz läuft. Stellen Sie sicher, dass Ihr Milvus-Cluster ordnungsgemäß funktioniert – beispielsweise, indem Sie eine Testkollektion erstellen, Daten einfügen und eine Abfrage ausführen.
Schritt 2: Führen Sie den MQ-Wechsel durch. Stellen Sie die MixCoord-Verwaltungsschnittstelle bereit und rufen Sie dann die Switch-API auf:
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
In einem anderen Terminal:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
Schritt 3: Überprüfen Sie, ob der Wechsel abgeschlossen ist.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Bei einem erfolgreichen Wechsel wird „ [mqTypeValue=woodpecker] “ protokolliert.
Schritt 4: (Optional) Stoppen Sie Kafka und führen Sie eine Bereinigung durch. Bei integriertem Kafka entfernen Sie die Kafka-Pods und deren PVCs. Bei externem Kafka bereinigen Sie die Milvus-Topics in der externen Kafka-Instanz – diese folgen dem Format <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>.
Wenn Sie später wieder zu Kafka zurückwechseln möchten, bereinigen Sie zunächst die Daten/Themen, um Konflikte zu vermeiden.
Wechsel von Woodpecker zu Kafka (Helm)
Schritt 1: Überprüfen Sie, ob die Milvus-Instanz läuft.
Schritt 2: Konfigurieren Sie die Ziel-Kafka-Verbindung und starten Sie Milvus neu. Für den Wechsel muss Milvus die Kafka-Verbindung bereits kennen; schreiben Sie diese daher über „ extraConfigFiles “ in „ user.yaml “ ein und wenden Sie die Änderung mit „ helm upgrade “ an (wodurch die Pods neu gestartet werden). „ streaming.enabled=true “ ist für die „Switch MQ“-Funktion erforderlich. Details zu SASL/SSL finden Sie unter „Verbindung zu Kafka mit SASL/SSL herstellen“.
# 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
Warten Sie, bis alle Pods bereit sind, und überprüfen Sie anschließend, ob die Kafka-Zugriffskonfiguration in die Milvus-Konfiguration übernommen wurde.
Schritt 3: Führen Sie den MQ-Wechsel durch.
Stellen Sie sicher, dass das Ziel-Kafka keine Milvus-Themen aus einer früheren Konfiguration enthält. Wenn dies Ihr erster Wechsel zu Kafka ist, überspringen Sie diesen Hinweis; andernfalls bereinigen Sie zunächst verbleibende Milvus-Themen mit denselben Namen.
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
In einem anderen Terminal:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "kafka"}'
Schritt 4: Überprüfen Sie, ob der Wechsel abgeschlossen ist.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Bei einem erfolgreichen Wechsel wird Folgendes protokolliert: „ [mqTypeValue=kafka] “.
Schritt 5: (Optional) Woodpecker-Daten bereinigen. Löschen Sie die Woodpecker-Daten auf MinIO/S3 (unter „ <rootPath>/wp/... “, typischerweise „ files/wp/... “) sowie die Woodpecker-Metadaten in etcd (etcdctl get woodpecker --prefix). Wenn Sie später wieder zu Woodpecker zurückwechseln möchten, bereinigen Sie diese Dateien zunächst.
Mit dem Milvus Operator
Wechsel von Kafka zu Woodpecker (Milvus Operator)
Schritt 1: Überprüfen Sie, ob die Milvus-Instanz läuft.
Schritt 2: Führen Sie den MQ-Wechsel durch. Da der MixCoord-Dienst nicht öffentlich zugänglich ist, führen Sie die Switch-API aus dem MixCoord-Pod heraus aus:
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
Schritt 3: Überprüfen Sie, ob der Wechsel abgeschlossen ist.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Bei einem erfolgreichen Wechsel wird „ [mqTypeValue=woodpecker] “ protokolliert.
Schritt 4: Aktualisieren Sie den MQ-Typ im Operator. Passen Sie die vom Operator verwaltete Konfiguration an, damit der Operator die Umstellung nicht rückgängig macht. Erstellen Sie „ 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
Schritt 5: (Optional) Stoppen Sie Kafka und führen Sie eine Bereinigung durch. Bei integriertem Kafka entfernen Sie die Kafka-Pods und deren PVCs. Bei externem Kafka bereinigen Sie die Milvus-Themen (Format: <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>).
Wechsel von Woodpecker zu Kafka (Milvus-Operator)
Schritt 1: Überprüfen Sie, ob die Milvus-Instanz läuft.
Schritt 2: Konfigurieren Sie die Verbindung zum Ziel-Kafka und starten Sie Milvus neu. Tragen Sie die Kafka-Verbindung unter spec.config ein (der Operator wandelt spec.config in user.yaml um) und legen Sie den MQ-Typ fest; durch das Anwenden des CR werden die Pods mit der neuen Konfiguration neu gestartet. Details zu SASL/SSL finden Sie unter „Verbindung zu Kafka mit SASL/SSL herstellen“.
# 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
Warten Sie, bis alle Pods bereit sind, und überprüfen Sie anschließend, ob die Kafka-Zugriffskonfiguration in die Milvus-Konfiguration übernommen wurde.
Schritt 3: Führen Sie den MQ-Wechsel durch.
Stellen Sie sicher, dass das Ziel-Kafka keine Milvus-Themen aus einer früheren Konfiguration enthält. Wenn dies Ihr erster Wechsel zu Kafka ist, überspringen Sie diesen Hinweis; andernfalls bereinigen Sie zunächst verbleibende Milvus-Themen mit denselben Namen.
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "kafka"}'
Schritt 4: Überprüfen Sie, ob der Wechsel abgeschlossen ist.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Bei einem erfolgreichen Wechsel wird „ [mqTypeValue=kafka] “ protokolliert.
Schritt 5: (Optional) Woodpecker-Daten bereinigen. Löschen Sie die Woodpecker-Daten auf MinIO/S3 (unter „ <rootPath>/wp/... “, typischerweise „ files/wp/... “) sowie die Woodpecker-Metadaten in etcd (etcdctl get woodpecker --prefix). Wenn Sie später wieder zu Woodpecker zurückwechseln möchten, bereinigen Sie diese Dateien zunächst.
Unterstützte Szenarien
| Quell-MQ | Ziel-MQ | Helm | Milvus-Operator |
|---|---|---|---|
| Integriertes Kafka | Woodpecker (MinIO) | Unterstützt | Unterstützt |
| Externes Kafka | Woodpecker (MinIO) | Unterstützt | Unterstützt |
| Woodpecker (MinIO) | Externes Kafka | Unterstützt | Unterstützt |
| Kafka | Woodpecker (lokal) | Unterstützt, aber nicht empfohlen (alle Pods benötigen ein gemeinsames Dateisystem) | Nicht unterstützt |