Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:Milvus

Dernière mise à jour :Aug 09, 2026

Cette rubrique décrit comment utiliser le connecteur Milvus.

Présentation

Milvus est une base de données vectorielle hautement évolutive conçue pour gérer des volumes importants de données non structurées, telles que des images, du texte et de l'audio. Elle prend en charge la recherche par similarité efficace, ce qui la rend idéale pour des cas d'utilisation tels que les systèmes de recommandation, la recherche d'images et la recherche sémantique. Le connecteur Milvus offre les fonctionnalités suivantes :

Catégorie

Détails

Types pris en charge

Table sink, table vectorielle

Mode d'exécution

Streaming

Format de données

Aucun

Métriques de surveillance spécifiques

Aucune

Type d'API

SQL

Prise en charge des mises à jour/suppressions

Oui

Fonctionnalités

Le connecteur Milvus intègre étroitement Apache Flink à la base de données vectorielle Milvus afin de créer un pipeline de données performant et fiable pour les scénarios de recherche vectorielle en temps réel. Voici les principales caractéristiques du connecteur Milvus :

  • Écritures à haute concurrence : prend en charge un parallélisme du sink configurable.

  • Nouvelles tentatives automatiques : relance les opérations ayant échoué pour améliorer la stabilité.

  • Mise en tampon par lots : améliore les performances d'écriture en regroupant les enregistrements avant leur vidage.

  • Sémantique au moins une fois (at-least-once) : garantit la cohérence à terme grâce à des mises à jour idempotentes basées sur la clé primaire.

  • Recherche vectorielle : permet d'effectuer des recherches de similarité vectorielle en temps réel directement dans Flink SQL.

Prérequis

  • Vous avez créé un cluster Milvus. Pour plus d'informations, consultez la section Démarrage rapide : Créer une instance Milvus.

  • Vous avez créé une collection Milvus. Si vous prévoyez d'écrire dans une partition spécifique, assurez-vous que la partition Milvus existe déjà.

Limitations

  • L'écriture dans une table sink nécessite Ververica Runtime (VVR) 11.1 ou une version ultérieure.

  • L'interrogation d'une table vectorielle nécessite VVR 11.3 ou une version ultérieure.

  • Seule la version Milvus 2.4.x est prise en charge.

  • Le connecteur Milvus prend uniquement en charge la sémantique au moins une fois (at-least-once).

Syntaxe

CREATE TEMPORARY TABLE milvus_sink (
  id BIGINT,
  f1 STRING,
  f2 BOOLEAN,
  f3 TINYINT,
  f4 SMALLINT,
  f5 INTEGER,
  f6 DATE,
  f7 TIME(3),
  f8 TIMESTAMP_LTZ(3),
  f9 TIMESTAMP(3),
  f10 FLOAT,
  f11 DOUBLE,
  f12 DECIMAL(10, 2),
  f13 ARRAY<FLOAT>,
  f14 ARRAY<DOUBLE>,
  f15 ARRAY<INTEGER>,
  f16 ARRAY<BIGINT>,
  PRIMARY KEY (id) NOT ENFORCED  -- Required. Milvus supports only BIGINT or STRING as the primary key.
) WITH (
  'connector'='milvus',
  'endpoint'='<yourEndpoint>',
  'port'='<yourPort>',
  'userName'='<yourUserName>',
  'password'='<yourPassword>',
  'databaseName'='<yourDatabaseName>',
  'collectionName'='<yourCollectionName>'
);

Options du connecteur

Général

Option

Description

Type de données

Obligatoire

Valeur par défaut

Notes

connector

Nom du connecteur.

String

Oui

Définissez cette option sur milvus.

endpoint

Endpoint (adresse IP ou nom de domaine) de la base de données Milvus.

String

Oui

Consultez la section Paramètres d'accès réseau et de sécurité.

port

Numéro de port de la base de données Milvus.

INTEGER

Non

19530

username

Nom d'utilisateur de la base de données Milvus.

STRING

Oui

Aucune.

password

Mot de passe de la base de données Milvus.

STRING

Oui

databaseName

Nom de la base de données Milvus.

STRING

Oui

collectionName

Nom de la collection Milvus.

STRING

Oui

partitionName

Nom de la partition dans laquelle écrire.

STRING

Non

_default

partitionKey.enabled

Indique si la collection utilise un champ scalaire comme clé de partition.

BOOLEAN

Non

false

maxRetries

Nombre de nouvelles tentatives en cas d'échec des opérations.

INTEGER

Non

3

Aucune.

Spécifique au sink

Option

Description

Type de données

Obligatoire

Valeur par défaut

Notes

sink.parallelism

Parallélisme de l'opérateur sink.

INTEGER

Non

Si cette option n'est pas définie, le parallélisme est hérité de l'opérateur en amont.

sink.maxRetries

Nombre maximal de nouvelles tentatives en cas d'échec d'écriture.

INTEGER

Non

3

Dans VVR 11.3 et versions ultérieures, cette option est obsolète. Utilisez plutôt maxRetries.

sink.buffer-flush.max-rows

Nombre maximal d'enregistrements à mettre en mémoire tampon (y compris les ajouts, les upserts et les suppressions). Un vidage est déclenché lorsque ce nombre est atteint.

INTEGER

Non

10000

Définissez cette option sur 0 pour désactiver ce déclencheur.

sink.buffer-flush.interval

Intervalle de temps en millisecondes (ms) pour le vidage des enregistrements mis en mémoire tampon. Un vidage est déclenché lorsque cet intervalle est dépassé.

INTEGER

Non

1000

Définissez cette option sur 0 pour désactiver le vidage basé sur le temps.

sink.ignoreDelete

Indique s'il faut ignorer les opérations de suppression.

BOOLEAN

Non

false

Valeurs valides :

  • true : ignore les opérations de suppression.

  • false : traite les opérations de suppression.

Spécifique à la table vectorielle

Paramètre

Description

Type de données

Obligatoire

Valeur par défaut

Notes

search.metric

Métrique utilisée pour mesurer la similarité vectorielle.

String

Non

L2

Pour obtenir des informations sur les métriques de similarité prises en charge, consultez la documentation Milvus. Milvus v2.4 prend actuellement en charge les métriques suivantes :

  • L2 : distance euclidienne

  • IP : produit scalaire

  • COSINE : similarité cosinus

Correspondance des types

Type Flink SQL

Type Milvus

STRING

VarChar(n)

BOOLEAN

Bool

TINYINT

Int8

SMALLINT

Int16

INTEGER

Int32

BIGINT

Int64

DATE

VarChar(n)

TIME(3)

VarChar(n)

TIMESTAMP_LTZ(3)

Int64

Remarque

Stocké sous forme de temps epoch en millisecondes.

TIMESTAMP(3)

VarChar(n)

FLOAT

Float

DOUBLE

Double

DECIMAL(10, 2)

VarChar(n)

ARRAY<FLOAT>

FloatVector

Remarque

Après avoir créé une collection Milvus, créez un index pour le champ vectoriel.

ARRAY<DOUBLE>

Array<Double>[m]

ARRAY<INTEGER>

Array<Int32>[m]

ARRAY<BIGINT>

Array<Int64>[m]

Exemples

  • Écrire des données de streaming dans Milvus

-- Create a mock data source that generates 100 rows per second. simulated streaming data.
CREATE TEMPORARY TABLE mock_source (
    id STRING,
    vector ARRAY<FLOAT>,       -- Vector passed as a FLOAT array.
    event_time AS PROCTIME() -- Processing time attribute.
) WITH (
    'connector' = 'datagen',
    'rows-per-second' = '100',  -- Generates 100 rows per second.
    'fields.id.kind' = 'sequence',
    'fields.id.start' = '1',
    'fields.id.end' = '1000'
);

CREATE TEMPORARY TABLE milvus_sink (
  id STRING,               -- Unique identifier, such as a device ID.
  vector ARRAY<FLOAT>,     -- Vector data. The array length must be consistent with the source.
  timestamp BIGINT         -- Timestamp for stream processing.
  PRIMARY KEY (id) NOT ENFORCED  -- Required. Milvus supports only BIGINT or STRING as the primary key.
) WITH (
  'connector'='milvus',
  'endpoint'='xxx',
  'port'='19530',
  'userName'='xxx',
  'password'='xxx',
  'databaseName'='xxxx',
  'collectionName'='xxxx'
);

-- Transform data and write to Milvus.
INSERT INTO milvus_sink
SELECT 
    id,
    vector,
    UNIX_TIMESTAMP() * 1000 AS timestamp  -- Current timestamp in milliseconds.
FROM mock_source;
  • Effectuer une recherche vectorielle

CREATE TEMPORARY TABLE milvus_table (
  id STRING,               -- Unique identifier.
  vector ARRAY<FLOAT>,     -- Vector data. The array length must be consistent with the source.
  PRIMARY KEY (id) NOT ENFORCED  -- Required. Milvus only supports BIGINT or STRING as the primary key.
) WITH (
  'connector'='milvus',
  'endpoint'='xxx',
  'port'='19530',
  'userName'='xxx',
  'password'='xxx',
  'databaseName'='xxxx',
  'collectionName'='xxxx'
);
-- Find the top 2 most similar items for the vector [1.1, 2.2, 3.3].
SELECT * FROM 
LATERAL TABLE(
  VECTOR_SEARCH(
    TABLE milvus_table, 
    DESCRIPTOR(vector), 
    ARRAY[1.1, 2.2, 3.3], 
    2));

Remarque : La collection Milvus doit être chargée en mémoire avant d'exécuter la requête. Pour plus d'informations, consultez la documentation Milvus sur la section Charger une collection.