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-MQZiel-MQHelmMilvus-Operator
Integriertes KafkaWoodpecker (MinIO)UnterstütztUnterstützt
Externes KafkaWoodpecker (MinIO)UnterstütztUnterstützt
Woodpecker (MinIO)Externes KafkaUnterstütztUnterstützt
KafkaWoodpecker (lokal)Unterstützt, aber nicht empfohlen (alle Pods benötigen ein gemeinsames Dateisystem)Nicht unterstützt