Todos los productos
Search
Centro de documentos

Realtime Compute for Apache Flink:Milvus

Última actualización: Sep 03, 2026

Este tema describe cómo usar el conector de Milvus.

Descripción general

Milvus es una base de datos vectorial altamente escalable diseñada para manejar datos no estructurados a gran escala, como imágenes, texto y audio. Admite búsquedas de similitud eficientes, lo que la hace ideal para casos de uso como sistemas de recomendación, recuperación de imágenes y búsqueda semántica. El conector de Milvus admite las siguientes capacidades:

Categoría

Detalles

Tipos compatibles

Tabla sink, tabla vectorial

Modo de ejecución

Streaming

Formato de datos

Ninguno

Métricas de monitoreo específicas

Ninguna

Tipo de API

SQL

Admite actualización/eliminación

Sí

Características

El conector de Milvus integra estrechamente Apache Flink con la base de datos vectorial Milvus para crear un pipeline de datos confiable y de alto rendimiento para escenarios de búsqueda vectorial en tiempo real. Las características principales del conector de Milvus incluyen:

  • Escrituras de alta concurrencia: Admite paralelismo de sink configurable.

  • Reintento automático: Reintenta operaciones con errores para mejorar la estabilidad.

  • Almacenamiento en búfer por lotes: Mejora el rendimiento de escritura al agrupar registros antes de vaciarlos.

  • Semántica at-least-once: Garantiza la consistencia eventual mediante actualizaciones idempotentes basadas en la clave primaria.

  • Búsqueda vectorial: Permite realizar búsquedas de similitud vectorial en tiempo real directamente en Flink SQL.

Requisitos previos

  • Ha creado un clúster de Milvus. Para obtener más información, consulte Quick start: Create a Milvus instance.

  • Ha creado una colección de Milvus. Si planea escribir en una partición específica, asegúrese de que la partición de Milvus ya exista.

Limitaciones

  • Escribir en una tabla sink requiere Ververica Runtime (VVR) 11.1 o posterior.

  • Consultar una tabla vectorial requiere VVR 11.3 o posterior.

  • Solo se admite Milvus 2.4.x.

  • El conector de Milvus solo admite semántica at-least-once.

Sintaxis

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>'
);

Opciones del conector

Generales

Opción

Descripción

Tipo de dato

Obligatorio

Valor predeterminado

Notas

connector

Nombre del conector.

String

Sí

Establézcalo en milvus.

endpoint

Endpoint (dirección IP o nombre de dominio) de la base de datos Milvus.

String

Sí

Consulte Network access and security settings.

port

Número de puerto de la base de datos Milvus.

INTEGER

No

19530

username

Nombre de usuario de la base de datos Milvus.

STRING

Sí

Ninguna.

password

Contraseña de la base de datos Milvus.

STRING

Sí

databaseName

Nombre de la base de datos Milvus.

STRING

Sí

collectionName

Nombre de la colección de Milvus.

STRING

Sí

partitionName

Nombre de la partición de destino para escritura.

STRING

No

_default

partitionKey.enabled

Indica si la colección usa un campo escalar como clave de partición.

BOOLEAN

No

false

maxRetries

Número de reintentos para operaciones con errores.

INTEGER

No

3

Ninguna.

Específicas de sink

Opción

Descripción

Tipo de dato

Obligatorio

Valor predeterminado

Notas

sink.parallelism

Paralelismo del operador sink.

INTEGER

No

Si no se configura, el paralelismo se hereda del operador anterior.

sink.maxRetries

Número máximo de reintentos tras una escritura con errores.

INTEGER

No

3

En VVR 11.3 y versiones posteriores, esta opción está obsoleta. Use maxRetries en su lugar.

sink.buffer-flush.max-rows

Número máximo de registros para almacenar en búfer (incluidas adiciones, actualizaciones y eliminaciones). Se activa un vaciado al alcanzar este recuento.

INTEGER

No

10000

Establézcalo en 0 para deshabilitar este activador.

sink.buffer-flush.interval

Intervalo de tiempo en milisegundos (ms) para vaciar los registros en búfer. Se activa un vaciado al superar este intervalo.

INTEGER

No

1000

Establézcalo en 0 para deshabilitar el vaciado basado en tiempo.

sink.ignoreDelete

Indica si se deben ignorar las operaciones de eliminación.

BOOLEAN

No

false

Valores válidos:

  • true: Ignora las operaciones de eliminación.

  • false: Procesa las operaciones de eliminación.

Específicas de tabla vectorial

Parámetro

Descripción

Tipo de dato

Obligatorio

Valor predeterminado

Notas

search.metric

Métrica usada para medir la similitud vectorial.

String

No

L2

Para obtener información sobre las métricas de similitud compatibles, consulte la documentación de Milvus. Milvus v2.4 admite actualmente las siguientes métricas:

  • L2: Distancia euclidiana

  • IP: Producto interno

  • COSINE: Similitud coseno

Mapeo de tipos

Tipo de Flink SQL

Tipo de 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

Nota

Se almacena como tiempo epoch en milisegundos.

TIMESTAMP(3)

VarChar(n)

FLOAT

Float

DOUBLE

Double

DECIMAL(10, 2)

VarChar(n)

ARRAY<FLOAT>

FloatVector

Nota

Después de crear una colección de Milvus, cree un índice para el campo vectorial.

ARRAY<DOUBLE>

Array<Double>[m]

ARRAY<INTEGER>

Array<Int32>[m]

ARRAY<BIGINT>

Array<Int64>[m]

Ejemplos

  • Escribir datos de streaming en 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;
  • Realizar una búsqueda vectorial

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));

Nota: La colección de Milvus debe cargarse en memoria antes de ejecutar la consulta. Para obtener más información, consulte la documentación de Milvus sobre Load a collection.