InfinyOn Fluvio

InfinyOn Fluvio (InfinyOn Fluvio)

실시간 데이터를 고속으로 처리해야 하는 환경에서는 메시지 스트리밍과 벡터 검색을 잇는 다리가 필요할 때가 있어요. InfinyOn Fluvio는 Rust로 작성된 오픈소스 실시간 데이터 처리 플랫폼인데, Qdrant와는 공식 Qdrant Fluvio Connector로 연결할 수 있어요. Fluvio 토픽의 레코드를 Qdrant 컬렉션으로 스트리밍하면서 Fluvio가 보장하는 delivery guarantee와 높은 처리량을 함께 누릴 수 있죠.

출처: Qdrant 공식 문서 — fluvio

Qdrant와 함께 사용하기

사전 요구 사항 (Pre-requisites)

  • Fluvio가 설치되어 있어야 해요. 설치는 Fluvio Quickstart 문서를 참고하면 돼요.
  • 연결할 Qdrant 서버가 필요해요. 로컬 인스턴스를 띄우거나, cloud.qdrant.io에서 무료 클라우드 인스턴스를 만들 수 있어요.

커넥터 다운로드 (Downloading the connector)

Fluvio 설정이 끝난 뒤에 다음 명령을 실행해서 커넥터를 내려받아요.

cdk hub download qdrant/[email protected]

예시 설정 (Example Config)

config.yaml

apiVersion: 0.1.0
meta:
  version: 0.1.0
  name: my-qdrant-connector
  type: qdrant-sink
  topic: topic-name
  secrets:
    - name: QDRANT_API_KEY
qdrant:
  url: https://xyz-example.eu-central.aws.cloud.qdrant.io:6334
  api_key: "${{ secrets.QDRANT_API_KEY }}"

secrets.txt

QDRANT_API_KEY=<SOME_API_KEY>

api_key는 설정 파일에 직접 적기보다 secrets.txt에 분리해 두고 ${{ secrets.QDRANT_API_KEY }}처럼 참조하는 패턴이 안전해요.

실행 (Running)

커넥터를 배포한 뒤 메시지를 만들어 Qdrant에 써 넣을 수 있어요.

cdk deploy start --ipkg qdrant-qdrant-sink-0.1.0.ipkg -c config.yaml --secrets secrets.txt
fluvio produce topic-name

지원하는 벡터 형식

이 sink 커넥터는 dense / sparse / multi 벡터 메시지를 지원해요. 각 항목을 클릭하면 펼쳐져요.

Unnamed/Default vector 참고: Creating a collection with a default vector

{
  "collection_name": "{collection_name}",
  "id": 1,
  "vectors": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8],
  "payload": {
    "name": "fluvio",
    "description": "Solution for distributed stream processing",
    "url": "https://www.fluvio.io/"
  }
}

Named multiple vectors 참고: Creating a collection with multiple vectors

{
  "collection_name": "{collection_name}",
  "id": 1,
  "vectors": {
    "some-dense": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8],
    "some-other-dense": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]
  },
  "payload": {
    "name": "fluvio",
    "description": "Solution for distributed stream processing",
    "url": "https://www.fluvio.io/"
  }
}

Sparse vectors 참고: Creating a collection with sparse vectors

{
  "collection_name": "{collection_name}",
  "id": 1,
  "vectors": {
    "some-sparse": {
      "indices": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
      "values": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    }
  },
  "payload": {
    "name": "fluvio",
    "description": "Solution for distributed stream processing",
    "url": "https://www.fluvio.io/"
  }
}

Multi-vector

{
  "collection_name": "{collection_name}",
  "id": 1,
  "vectors": {
    "some-multi": [
      [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
      [1.0, 0.9, 0.8, 0.5, 0.4, 0.8, 0.6, 0.4, 0.2, 0.1]
    ]
  },
  "payload": {
    "name": "fluvio",
    "description": "Solution for distributed stream processing",
    "url": "https://www.fluvio.io/"
  }
}

Named dense와 sparse 벡터의 조합 참고:

{
  "collection_name": "{collection_name}",
  "id": "a10435b5-2a58-427a-a3a0-a5d845b147b7",
  "vectors": {
    "some-other-dense": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8],
    "some-sparse": {
      "indices": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
      "values": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    }
  },
  "payload": {
    "name": "fluvio",
    "description": "Solution for distributed stream processing",
    "url": "https://www.fluvio.io/"
  }
}

더 알아보기 (Learn more)