Passaggio da Kafka a Woodpecker

Questa pagina descrive come passare dalla coda dei messaggi (MQ) di un cluster Milvus da Kafka (integrato o esterno) a Woodpecker (backend MinIO) e viceversa. Per il flusso di lavoro generale e i prerequisiti, consultare Passare alla coda dei messaggi.

Prerequisito: la funzionalità "Cambio della coda dei messaggi" è disponibile in Milvus 3.0 e versioni successive. Aggiornare l’istanza di Milvus a Milvus 3.0 o versioni successive prima di iniziare: la funzionalità non è disponibile nelle versioni precedenti.

Il cambio della coda dei messaggi è un'operazione ad alto rischio. Scegli la sezione che corrisponde al tuo metodo di distribuzione — Con Helm o Con Milvus Operator — e seguila dall'inizio alla fine. Non mescolare i comandi di Helm e Operator.

Con Helm

Passaggio da Kafka a Woodpecker (Helm)

Passaggio 1: Verifica che l’istanza di Milvus sia in esecuzione. Assicurati che il tuo cluster Milvus funzioni correttamente — ad esempio, creando una raccolta di prova, inserendo dati ed eseguendo una query.

Passo 2: Eseguire il cambio di MQ. Esporre l’interfaccia di gestione MixCoord, quindi chiamare l’API di cambio:

kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091

In un altro terminale:

curl -X POST http://127.0.0.1:29091/management/wal/alter \
  -H "Content-Type: application/json" \
  -d '{"target_wal_name": "woodpecker"}'

Passaggio 3: Verifica che il passaggio sia stato completato.

kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"

Se il passaggio va a buon fine, viene registrato il messaggio " [mqTypeValue=woodpecker]".

Passaggio 4: (Facoltativo) Arrestare Kafka ed eseguire la pulizia. Per Kafka integrato, rimuovere i pod Kafka e i relativi PVC. Per Kafka esterno, ripulire gli argomenti Milvus nell’istanza Kafka esterna: seguono il formato <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>.

Se si prevede di tornare a Kafka in un secondo momento, ripulire prima i dati/argomenti per evitare conflitti.

Passaggio da Woodpecker a Kafka (Helm)

Passaggio 1: Verificare che l’istanza di Milvus sia in esecuzione.

Passaggio 2: configurare la connessione a Kafka di destinazione e riavviare Milvus. Il passaggio richiede che Milvus conosca già la connessione a Kafka, quindi inserirla in user.yaml tramite extraConfigFiles e applicare con helm upgrade (che esegue il rollover dei pod). streaming.enabled=true è necessario per la funzionalità Switch MQ. Per i dettagli su SASL/SSL, consultare Connettersi a Kafka con 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

Attendere che tutti i pod siano pronti, quindi verificare che la configurazione di accesso a Kafka sia stata incorporata nella configurazione di Milvus.

Passaggio 3: Eseguire il passaggio a MQ.

Assicurarsi che il Kafka di destinazione non contenga argomenti Milvus provenienti da una configurazione precedente. Se si tratta del primo passaggio a Kafka, ignorare questa nota; in caso contrario, eliminare prima gli argomenti Milvus residui con gli stessi nomi.

kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091

In un altro terminale:

curl -X POST http://127.0.0.1:29091/management/wal/alter \
  -H "Content-Type: application/json" \
  -d '{"target_wal_name": "kafka"}'

Passaggio 4: verificare che il passaggio sia stato completato.

kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"

Se il passaggio ha esito positivo, viene registrato il messaggio " [mqTypeValue=kafka]".

Passaggio 5: (Facoltativo) Eliminare i dati di Woodpecker. Eliminare i dati di Woodpecker su MinIO/S3 (nella directory <rootPath>/wp/..., in genere files/wp/...) e i metadati di Woodpecker in etcd (etcdctl get woodpecker --prefix). Se si prevede di tornare a Woodpecker in un secondo momento, eliminare prima questi file.

Con Milvus Operator

Passaggio da Kafka a Woodpecker (Milvus Operator)

Passaggio 1: Verificare che l’istanza di Milvus sia in esecuzione.

Passaggio 2: Eseguire il passaggio a MQ. Il servizio MixCoord non è esposto, quindi eseguire l’API di passaggio dall’interno del 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"}'

Passaggio 3: Verificare che il passaggio sia stato completato.

kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"

Se il passaggio va a buon fine, viene registrato il messaggio " [mqTypeValue=woodpecker]".

Passaggio 4: aggiornare il tipo di MQ nell’Operator. Aggiornare la configurazione gestita dall’Operator in modo che l’Operator non annulli il passaggio. Creare 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

Passaggio 5: (Facoltativo) Arrestare Kafka ed eseguire la pulizia. Per Kafka integrato, rimuovere i pod Kafka e i relativi PVC. Per Kafka esterno, ripulire gli argomenti Milvus (formato <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>).

Passaggio da Woodpecker a Kafka (Operatore Milvus)

Passaggio 1: Verificare che l’istanza di Milvus sia in esecuzione.

Passaggio 2: configurare la connessione a Kafka di destinazione e riavviare Milvus. Inserire la connessione a Kafka in spec.config (l’Operator converte spec.config in user.yaml) e impostare il tipo di MQ; l’applicazione del CR aggiorna i pod con la nuova configurazione. Per i dettagli su SASL/SSL, consultare Connettersi a Kafka con 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

Attendere che tutti i pod siano pronti, quindi verificare che la configurazione di accesso a Kafka sia stata applicata alla configurazione di Milvus.

Passaggio 3: Eseguire il passaggio a MQ.

Assicurarsi che il Kafka di destinazione non contenga argomenti Milvus provenienti da una configurazione precedente. Se si tratta del primo passaggio a Kafka, ignorare questa nota; in caso contrario, eliminare prima gli argomenti Milvus residui con gli stessi nomi.

kubectl exec -it <mixcoord-pod> -- \
  curl -X POST http://localhost:9091/management/wal/alter \
  -H "Content-Type: application/json" \
  -d '{"target_wal_name": "kafka"}'

Passaggio 4: Verificare che il passaggio sia stato completato.

kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"

Se il passaggio va a buon fine, viene registrato il messaggio « [mqTypeValue=kafka] ».

Passaggio 5: (Facoltativo) Eliminare i dati di Woodpecker. Eliminare i dati di Woodpecker su MinIO/S3 (nella directory <rootPath>/wp/..., in genere files/wp/...) e i metadati di Woodpecker in etcd (etcdctl get woodpecker --prefix). Se si prevede di tornare a Woodpecker in un secondo momento, eliminare prima questi file.

Scenari supportati

MQ di origineMQ di destinazioneHelmOperatore Milvus
Kafka integratoWoodpecker (MinIO)SupportatoSupportato
Kafka esternoWoodpecker (MinIO)SupportatoSupportato
Woodpecker (MinIO)Kafka esternoSupportatoSupportato
KafkaWoodpecker (locale)Supportato ma non consigliato (tutti i pod necessitano di un sistema di file condiviso)Non supportato

Tradotto daDeepL

Prova Milvus gestito gratuitamente

Zilliz Cloud è senza problemi, basato su Milvus e 10 volte più veloce.

Inizia
Feedback

Questa pagina è stata utile?