在 Kafka 與 Woodpecker 之間切換
本頁面說明如何將Milvus 叢集的訊息佇列 (MQ) 在Kafka(內建或外部)與Woodpecker(MinIO 後端)之間進行雙向切換。有關一般工作流程與先決條件,請參閱《切換訊息佇列》。
先決條件:MQ 切換功能僅適用於Milvus 3.0 及後續版本。開始操作前,請將您的 Milvus 實例升級至 Milvus 3.0 或後續版本——此功能在較早版本中不可用。
切換訊息佇列是一項高風險操作。請選擇與您的部署方式相符的章節 —「使用 Helm」或「使用 Milvus Operator」— 並依序從頭至尾執行。請勿混用 Helm 與 Operator 指令。
使用 Helm
從 Kafka 切換至 Woodpecker(Helm)
步驟 1:確認 Milvus 實例正在運行。確保您的 Milvus 叢集運作正常 —— 例如,建立測試集合、插入資料並執行查詢。
步驟 2:執行訊息佇列切換。公開 MixCoord 管理介面,然後呼叫切換 API:
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
在另一個終端機中:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
步驟 3:驗證切換是否完成。
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
若切換成功,系統會記錄[mqTypeValue=woodpecker] 。
步驟 4:(可選)停止 Kafka 並進行清理。對於內建的Kafka,請移除 Kafka Pod 及其 PVC。對於外部Kafka,請清理外部 Kafka 實例中的 Milvus 主題 — 這些主題的格式為<cluster_prefix>-dml_<seqNo>_<TimeTick><Version> 。
若您計劃日後切換回 Kafka,請先清理資料/主題以避免衝突。
從 Woodpecker 切換至 Kafka(Helm)
步驟 1:確認 Milvus 實例正在運行。
步驟 2:設定目標 Kafka 連線並重新啟動 Milvus。此切換操作需要 Milvus 已知曉 Kafka 連線設定,因此請透過 `extraConfigFiles ` 將其寫入 `user.yaml `,並使用 `helm upgrade ` 套用設定(此操作會重啟 Pod)。`streaming.enabled=true ` 是「切換訊息佇列 (Switch MQ)」功能所需的設定。有關 SASL/SSL 的詳細資訊,請參閱《使用 SASL/SSL 連線至 Kafka》。
# 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
請等待所有 Pod 準備就緒,然後確認 Kafka 存取設定已套用至 Milvus 設定中。
步驟 3:執行 MQ 切換。
請確保目標 Kafka 中不包含來自先前設定的 Milvus 主題。若這是您首次切換至 Kafka,請跳過此說明;否則請先清理名稱相同的殘留 Milvus 主題。
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
在另一個終端機中:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "kafka"}'
步驟 4:驗證切換是否完成。
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
若切換成功,系統會記錄[mqTypeValue=kafka] 。
步驟 5:(可選)清理 Woodpecker 資料。刪除 MinIO/S3 上的 Woodpecker 資料(位於<rootPath>/wp/... 目錄下,通常為files/wp/... )以及 etcd 中的 Woodpecker 元資料(etcdctl get woodpecker --prefix )。若您計劃日後切換回 Woodpecker,請先清理這些檔案。
使用 Milvus Operator
從 Kafka 切換至 Woodpecker(Milvus Operator)
步驟 1:確認 Milvus 實例正在執行。
步驟 2:執行 MQ 切換。由於 MixCoord 服務未對外公開,因此請從 MixCoord pod 內部執行切換 API:
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
步驟 3:驗證切換是否完成。
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
切換成功時會記錄[mqTypeValue=woodpecker] 。
步驟 4:更新 Operator 中的訊息佇列類型。更新由Operator管理的配置,以防止 Operator 將切換操作還原。建立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
步驟 5:(可選)停止 Kafka 並進行清理。對於內建的Kafka,請移除 Kafka Pod 及其 PVC。對於外部Kafka,請清理 Milvus 主題(格式為<cluster_prefix>-dml_<seqNo>_<TimeTick><Version> )。
從 Woodpecker 切換至 Kafka(Milvus Operator)
步驟 1:確認 Milvus 實例正在執行。
步驟 2:設定目標 Kafka 連線並重新啟動 Milvus。將 Kafka 連線置於spec.config 下(Operator 會將spec.config 渲染為user.yaml ),並設定 MQ 類型;套用 CR 後,系統會根據新設定重新部署 Pod。有關 SASL/SSL 的詳細資訊,請參閱《使用 SASL/SSL 連線至 Kafka》。
# 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
等待所有 Pod 準備就緒後,確認 Kafka 存取設定已渲染至 Milvus 設定中。
步驟 3:執行 MQ 切換。
請確保目標 Kafka 中不包含來自先前配置的 Milvus 主題。若這是您首次切換至 Kafka,請跳過此注意事項;否則,請先清理同名的殘留 Milvus 主題。
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "kafka"}'
步驟 4:驗證切換是否完成。
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
若切換成功,系統會記錄[mqTypeValue=kafka] 。
步驟 5:(可選)清理 Woodpecker 資料。刪除 MinIO/S3 上的 Woodpecker 資料(位於<rootPath>/wp/... 目錄下,通常為files/wp/... )以及 etcd 中的 Woodpecker 元資料(etcdctl get woodpecker --prefix )。若您計劃日後切換回 Woodpecker,請先清理這些檔案。
支援的情境
| 來源 MQ | 目標 MQ | Helm | Milvus Operator |
|---|---|---|---|
| 內建 Kafka | Woodpecker (MinIO) | 已支援 | 已支援 |
| 外部 Kafka | Woodpecker (MinIO) | 已支援 | 受支援 |
| Woodpecker (MinIO) | 外部 Kafka | 已支援 | 受支援 |
| Kafka | Woodpecker(本地) | 受支援但不建議使用(所有 Pod 都需要共用檔案系統) | 不支援 |