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 |
|
|
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 |
|
|
|
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 |
|
|
|
partitionKey.enabled |
Indica si la colección usa un campo escalar como clave de partición. |
BOOLEAN |
No |
|
|
|
maxRetries |
Número de reintentos para operaciones con errores. |
INTEGER |
No |
|
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 |
|
En VVR 11.3 y versiones posteriores, esta opción está obsoleta. Use |
|
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 |
|
Establézcalo en |
|
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 |
|
Establézcalo en |
|
sink.ignoreDelete |
Indica si se deben ignorar las operaciones de eliminación. |
BOOLEAN |
No |
|
Valores válidos:
|
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 |
|
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:
|
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.