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단계: MQ 전환을 실행합니다. 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 포드와 해당 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 를 실행하여 적용합니다(이 명령은 포드를 롤오버합니다). Switch MQ 기능을 사용하려면 streaming.enabled=true 가 필요합니다. 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

모든 파드가 준비될 때까지 기다린 후, 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( <rootPath>/wp/... 폴더 내, 일반적으로 files/wp/...)에 있는 Woodpecker 데이터와 etcd(etcdctl get woodpecker --prefix)에 있는 Woodpecker 메타데이터를 삭제합니다. 나중에 Woodpecker로 다시 전환할 계획이라면, 먼저 이 파일들을 정리하십시오.

Milvus Operator 사용 시

Kafka에서 Woodpecker로 전환(Milvus Operator)

1단계: Milvus 인스턴스가 실행 중인지 확인합니다.

2단계: MQ 전환을 실행합니다. MixCoord 서비스는 외부에 노출되지 않으므로 MixCoord 포드 내부에서 전환 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에서 MQ 유형을 업데이트합니다. 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 포드와 해당 PVC를 제거합니다. 외부 Kafka의 경우, Milvus 토픽을 정리합니다( <cluster_prefix>-dml_<seqNo>_<TimeTick><Version> 형식).

Woodpecker에서 Kafka로 전환(Milvus Operator)

1단계: Milvus 인스턴스가 실행 중인지 확인합니다.

2단계: 대상 Kafka 연결을 구성하고 Milvus를 다시 시작합니다. Kafka 연결을 spec.config 아래에 배치하고(Operator는 spec.configuser.yaml 로 변환합니다), MQ 유형을 설정합니다. CR을 적용하면 포드가 새로운 구성으로 재시작됩니다. 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

모든 파드가 준비될 때까지 기다린 후, 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( <rootPath>/wp/... 폴더 내, 일반적으로 files/wp/...)에 있는 Woodpecker 데이터와 etcd(etcdctl get woodpecker --prefix)에 있는 Woodpecker 메타데이터를 삭제합니다. 나중에 Woodpecker로 다시 전환할 계획이라면, 먼저 이 파일들을 정리하십시오.

지원되는 시나리오

소스 MQ대상 MQHelmMilvus Operator
내장형 KafkaWoodpecker (MinIO)지원됨지원됨
외부 KafkaWoodpecker (MinIO)지원됨지원됨
Woodpecker (MinIO)외부 Kafka지원됨지원됨
KafkaWoodpecker (로컬)지원되지만 권장되지 않음 (모든 포드에 공유 파일 시스템이 필요함)지원되지 않음

번역DeepL

관리형 Milvus를 무료로 사용해 보세요

Zilliz Cloud는 번거로움이 없으며, Milvus 기반으로 10배 더 빠릅니다.

시작하기
피드백

이 페이지가 도움이 되었나요?