在 Kafka 和 Woodpecker 之间切换

本页面介绍如何在Milvus 集群中将消息队列 (MQ) 在Kafka(内置或外部)和Woodpecker(MinIO 后端)之间双向切换。有关一般工作流和先决条件,请参阅《切换消息队列》

先决条件:切换消息队列功能仅在Milvus 3.0 及更高版本中提供。开始操作前,请将您的 Milvus 实例升级至 Milvus 3.0 或更高版本——此功能在早期版本中不可用。

切换消息队列是一项高风险操作。请选择与您的部署方式相匹配的章节——使用 Helm 或使用 Milvus Operator——并按顺序从头到尾操作。请勿混合使用 Helm 和 Operator 命令。

使用 Helm

从 Kafka 切换到 Woodpecker(Helm)

步骤 1:验证 Milvus 实例是否正在运行。确保您的 Milvus 集群运行正常——例如,通过创建测试 Collection、插入数据并执行查询来验证。

步骤 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:更新操作符中的 MQ 类型。更新操作符管理的配置,以防止操作符撤销此次切换。创建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 下(操作符会将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目标 MQHelmMilvus Operator
内置 KafkaWoodpecker (MinIO)已支持已支持
外部 KafkaWoodpecker (MinIO)已支持已支持
Woodpecker (MinIO)外部 Kafka已支持已支持
KafkaWoodpecker(本地)支持但不推荐(所有 Pod 都需要共享文件系统)不支持

翻译自DeepL

想要更快、更简单、更好用的 Milvus SaaS服务 ?

Zilliz Cloud是基于Milvus的全托管向量数据库,拥有更高性能,更易扩展,以及卓越性价比

免费试用 Zilliz Cloud
反馈

此页对您是否有帮助?