Todos los productos
Search
Centro de documentos

Realtime Compute for Apache Flink:Log Service (SLS)

Última actualización: Sep 21, 2026

Aprenda a usar el conector de Log Service (SLS).

Contexto

Simple Log Service es un servicio integral para datos de registros. Le permite recopilar, consumir, enviar, consultar y analizar estos datos de manera eficiente. Esto mejora la eficiencia de las operaciones y el mantenimiento, además de facilitar el procesamiento de grandes volúmenes de información.

A continuación se muestran las capacidades del conector de SLS.

Categoría

Descripción

Tipos compatibles

Tabla de origen y tabla de destino

Modo de ejecución

Solo modo de streaming

Métricas específicas del conector

N/D

Formato de datos

N/D

Tipo de API

SQL, DataStream API y API YAML de ingesta de datos

Actualización o eliminación de datos en la tabla de destino

Las tablas de destino solo admiten anexos; no es posible actualizar ni eliminar datos.

Funciones

El conector de origen de SLS lee directamente los campos de atributos de los mensajes. La siguiente tabla muestra los campos compatibles.

Parámetro

Tipo

Descripción

__source__

STRING METADATA VIRTUAL

Origen del mensaje.

__topic__

STRING METADATA VIRTUAL

Tema del mensaje.

__timestamp__

BIGINT METADATA VIRTUAL

Hora del registro.

__tag__

MAP<VARCHAR, VARCHAR> METADATA VIRTUAL

Etiqueta del mensaje.

Por ejemplo, para el atributo "__tag__:__receive_time__":"1616742274", '__receive_time__' y '1616742274' se almacenan como un par clave-valor en el mapa. Para acceder al valor en SQL, use __tag__['__receive_time__'].

Requisitos previos

Asegúrese de haber creado un proyecto de Log Service y un logstore. Para obtener más información, consulte Create a Project and a Logstore.

Limitaciones

  • Solo Ververica Runtime (VVR) 11.1 y versiones posteriores permiten usar SLS como origen síncrono para la ingesta de datos definida en YAML.

  • El conector de SLS garantiza únicamente la semántica at-least-once.

  • No configure source parallelism con un valor superior al número de shards, ya que esto desperdicia recursos. Además, en Ververica Runtime (VVR) 8.0.5 y versiones anteriores, un cambio en la cantidad de shards puede provocar que la función automática de failover falle e impida el consumo de algunos shards.

SQL

Sintaxis

CREATE TABLE sls_table(
  a INT,
  b INT,
  c VARCHAR
) WITH (
  'connector' = 'sls',
  'endPoint' = '<yourEndPoint>',
  'project' = '<yourProjectName>',
  'logStore' = '<yourLogStoreName>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}'
);

Opciones WITH

  • Generales

    Parámetro

    Descripción

    Tipo

    Obligatorio

    Predeterminado

    Observaciones

    connector

    El conector que se va a utilizar.

    String

    Sí

    Ninguna

    Establezca este valor en sls.

    endPoint

    El endpoint de Log Service (SLS).

    String

    Sí

    Ninguna

    Especifique la dirección de acceso de VPC de Log Service (SLS). Para obtener más información, consulte Service endpoints.

    Nota
    • De forma predeterminada, Realtime Compute for Apache Flink no tiene acceso a Internet. Para habilitar el acceso a Internet desde su Virtual Private Cloud (VPC), utilice una NAT Gateway. Para obtener más información, consulte How do I access the Internet?.

    • Se recomienda no acceder a SLS a través de Internet. Si es indispensable hacerlo, utilice HTTPS y habilite la aceleración de transferencia. Para obtener más información, consulte Manage transfer acceleration.

    project

    El nombre del proyecto de SLS.

    String

    Sí

    Ninguna

    N/D

    logStore

    El nombre del logstore o MetricStore.

    String

    Sí

    Ninguna

    Los datos de un logstore se consumen de la misma manera que los de un MetricStore.

    accessId

    El AccessKey ID de su cuenta de Alibaba Cloud.

    String

    Sí

    Ninguna

    Para obtener más información, consulte Obtain an AccessKey pair.

    Importante

    Para evitar exponer su par de AccessKey, se recomienda usar variables para especificar el AccessKey ID y el AccessKey secret. Para obtener más información, consulte Project variables.

    accessKey

    El AccessKey secret de su cuenta de Alibaba Cloud.

    String

    Sí

    Ninguna

    akless.assume-role.role-name

    El nombre del rol de RAM que se utiliza para acceder a SLS.

    String

    No

    Ninguna

    Si no se especifican accessId y accessKey, debe configurar este parámetro para acceder a los recursos de SLS mediante un rol de RAM.

    El rol de RAM debe referenciarse previamente en Access Security/RAM Roles.

    Nota

    Este parámetro solo es compatible con VVR 11.9.0 y versiones posteriores.

  • Específicas del origen

    Parámetro

    Descripción

    Tipo

    Obligatorio

    Predeterminado

    Observaciones

    enableNewSource

    Indica si se utiliza el nuevo origen de datos que implementa la interfaz FLIP-27.

    Boolean

    No

    false

    El nuevo origen se adapta automáticamente a los cambios de shards y los distribuye de la forma más equitativa posible entre todas las subtareas de origen.

    Importante
    • Esta opción solo es compatible con VVR 8.0.9 y versiones posteriores. El valor predeterminado es true en VVR 11.1 y versiones posteriores.

    • Si modifica el valor de esta opción, no podrá restaurar trabajos desde un estado guardado. Para reanudar el consumo desde un desplazamiento histórico, primero inicie el trabajo con la opción consumerGroup para registrar el progreso de consumo en el grupo de consumidores de SLS. Luego, establezca la opción consumeFromCheckpoint en true y reinicie el trabajo sin estado.

    • Si un logstore tiene shards de solo lectura, algunas subtareas podrían seguir solicitando datos de otros shards después de terminar los suyos. Esto genera una carga de trabajo desequilibrada que afecta el rendimiento. Para mitigar este problema, ajuste el paralelismo, optimice la estrategia de programación o combine shards pequeños para reducir su cantidad y simplificar la asignación de tareas.

    shardDiscoveryIntervalMs

    El intervalo para la detección dinámica de shards.

    Long

    No

    60000

    Establezca esta opción en un valor negativo para deshabilitar la detección dinámica. Unidad: milisegundos.

    Nota
    • El valor debe ser mayor o igual a 60,000 milisegundos (1 minuto).

    • Esta opción solo surte efecto cuando enableNewSource se establece en true.

    • Esta opción solo es compatible con VVR 8.0.9 y versiones posteriores.

    startupMode

    El modo de inicio de la tabla de origen.

    String

    No

    timestamp

    • timestamp (predeterminado): consume registros a partir de la hora de inicio especificada.

    • latest: inicia el consumo de registros desde el desplazamiento más reciente.

    • earliest: inicia el consumo de registros desde el desplazamiento más antiguo.

    • consumer_group: inicia el consumo de registros desde el desplazamiento registrado por el grupo de consumidores. Si el grupo de consumidores no ha registrado un desplazamiento de consumo para un shard, el consumo comienza desde el desplazamiento más antiguo.

    Importante
    • En versiones de VVR anteriores a la 11.1, no se admite el valor consumer_group. Debe establecer consumeFromCheckpoint en true. En este caso, el consumo de registros comienza desde el desplazamiento registrado por el grupo de consumidores especificado, y la configuración del modo de inicio no surte efecto.

    startTime

    La hora de inicio para el consumo de registros.

    String

    No

    Hora actual

    El formato es yyyy-MM-dd hh:mm:ss.

    Solo surte efecto cuando startupMode se establece en timestamp.

    Nota

    Las opciones startTime y stopTime se basan en el atributo __receive_time__ de SLS, no en el atributo __timestamp__.

    stopTime

    La hora de finalización para el consumo de registros.

    String

    No

    Ninguna

    El formato es yyyy-MM-dd hh:mm:ss.

    Nota
    • Esta opción solo se utiliza para consumir registros históricos y debe configurarse con una hora pasada. Si la establece en una hora futura, el consumo podría detenerse de forma prematura cuando no se escriban nuevos registros. Esto provoca una interrupción del flujo de datos sin mensajes de error.

    • Si desea que el trabajo de Flink termine después de consumir todos los registros, también debe establecer exitAfterFinish en true.

    consumerGroup

    El nombre del grupo de consumidores.

    String

    No

    Ninguna

    Un grupo de consumidores sirve para registrar el progreso de consumo. Puede especificar un nombre personalizado sin un formato fijo.

    Nota

    Cada trabajo de Flink debe usar un grupo de consumidores distinto. Si varios trabajos de Flink utilizan el mismo grupo de consumidores, no se coordinan entre sí y cada uno consume todos los datos. Esto ocurre porque Flink no emplea el grupo de consumidores de SLS para asignar particiones cuando consume datos de SLS. Como resultado, cada consumidor procesa los mensajes de forma independiente, incluso si comparten el mismo grupo de consumidores.

    consumeFromCheckpoint

    Indica si se consume desde un punto de control del grupo de consumidores.

    String

    No

    false

    • true: también debe especificar un grupo de consumidores. El programa de Flink comienza a consumir registros desde el punto de control guardado en dicho grupo. Si el grupo de consumidores no tiene un punto de control correspondiente, el consumo inicia desde el valor de configuración de startTime.

    • false (valor predeterminado): no inicia el consumo de registros desde el punto de control guardado para el grupo de consumidores especificado.

    Importante

    Este parámetro ya no es compatible con VVR 11.1 y versiones posteriores. En estas versiones, debe establecer la opción startupMode en consumer_group.

    maxRetries

    El número de reintentos tras un intento fallido de lectura desde SLS.

    String

    No

    3

    N/D

    batchGetSize

    El número de grupos de registros que se leen en una sola solicitud.

    String

    No

    100

    La configuración de batchGetSize no puede superar 1000; de lo contrario, se reporta un error.

    exitAfterFinish

    Indica si el trabajo de Flink termina después de consumir todos los datos.

    String

    No

    false

    • true: el programa de Flink termina después de consumir todos los datos.

    • false (predeterminado): el programa de Flink no termina al finalizar el consumo de datos.

    query

    Importante

    Esta opción quedó obsoleta en VVR 11.3, pero las versiones posteriores siguen siendo compatibles.

    La instrucción de consulta para preprocesar los datos antes del consumo.

    String

    No

    Ninguna

    Utilice esta opción para filtrar los datos de SLS antes de que Flink los consuma. Esto reduce costos y mejora la velocidad de procesamiento.

    Por ejemplo, 'query' = '*| where request_method = ''GET''' indica que, antes de leer datos de SLS, Flink selecciona aquellos donde el valor del campo request_method es 'GET'.

    Nota

    Esta opción utiliza el lenguaje SPL de Log Service (SLS). Para obtener más información, consulte SPL syntax.

    Importante
    • Esta opción solo es compatible con VVR 8.0.1 y versiones posteriores.

    • Esta función genera cargos de Log Service (SLS). Para obtener más información, consulte Billing of Log Service.

    processor

    El nombre del procesador de SLS para el preprocesamiento de datos. Si se especifican tanto query como processor, query tiene prioridad y processor se ignora.

    String

    No

    Ninguna

    Esta opción filtra los datos de SLS antes de que Flink los consuma, lo cual reduce costos y mejora la velocidad de procesamiento. Se recomienda usar processor en lugar de query.

    Por ejemplo, 'processor' = 'test-filter-processor' indica que el procesador de SLS filtra los datos antes de que Flink los lea desde SLS.

    Nota

    Esta opción utiliza el lenguaje SPL de Log Service (SLS). Para obtener más información, consulte SPL syntax. Para conocer cómo crear o actualizar un procesador de SLS, consulte Manage processors.

    Importante

    Esta opción solo es compatible con VVR 11.3 y versiones posteriores.

    Esta función genera cargos de Log Service (SLS). Para obtener más información, consulte Billing of Log Service.

    preserveRawBytes

    Indica si se obtienen y conservan directamente los bytes sin procesar transportados por SLS cuando enableNewSource se establece en true.

    Boolean

    No

    false

    Cuando esta opción está habilitada, los campos BINARY/VARBINARY leen directamente el byte[] sin procesar, y los campos CHAR/VARCHAR construyen los datos de cadena a partir de esos bytes. Los demás campos siguen utilizando la lógica de conversión predeterminada. Este comportamiento coincide con el del origen anterior.

    Nota
    • Esta opción solo es compatible con VVR 11.8 y versiones posteriores.

    • Esta opción solo surte efecto cuando enableNewSource se establece en true.

  • Específicas del destino

    Parámetro

    Descripción

    Tipo

    Obligatorio

    Predeterminado

    Observaciones

    topicField

    Especifica un campo cuyo valor sobrescribe el atributo __topic__, que indica el tema del registro.

    String

    No

    Ninguna

    El valor de esta opción debe ser un campo existente en la tabla.

    timeField

    Especifica un campo cuyo valor sobrescribe el atributo __timestamp__, que indica la hora de escritura del registro.

    String

    No

    Hora actual

    El valor de esta opción debe ser un campo INT existente en la tabla. Si no se especifica, se utiliza la hora actual.

    sourceField

    Especifica un campo cuyo valor sobrescribe el atributo __source__, que indica el origen del registro, como la dirección IP de la máquina que lo generó.

    String

    No

    Ninguna

    El valor de esta opción debe ser un campo existente en la tabla.

    partitionField

    Especifica un campo para la creación de particiones. Un hash del valor de este campo determina qué shard recibe los datos, lo que garantiza que los registros con el mismo hash se envíen al mismo shard.

    String

    No

    Ninguna

    Si no se especifica esta opción, cada registro se escribe de forma aleatoria en un shard disponible.

    buckets

    Si se especifica partitionField, esta opción define el número de buckets para asignar los valores de hash.

    String

    No

    64

    El valor debe ser una potencia de 2 dentro del rango [1, 256]. La cantidad de buckets debe ser mayor o igual que la cantidad de shards. De lo contrario, algunos shards podrían no recibir datos.

    flushIntervalMs

    El intervalo de escritura de datos.

    String

    No

    2000

    Unidad: milisegundos.

    writeNullProperties

    Indica si los valores nulos se escriben en SLS como cadenas vacías.

    Boolean

    No

    true

    • true (valor predeterminado): escribe los valores nulos en el registro como cadenas vacías.

    • false: los campos que se evalúan como nulos no se escriben en el registro.

    Nota

    Esta opción solo es compatible con VVR 8.0.6 y versiones posteriores.

Asignación de tipos

Tipo de Flink

Tipo de SLS

BOOLEAN

STRING

VARBINARY

VARCHAR

TINYINT

INTEGER

BIGINT

FLOAT

DOUBLE

DECIMAL

Ingesta de datos (Beta)

Limitaciones

Esta función solo es compatible con Realtime Compute for Apache Flink versión 11.1 y posteriores.

Sintaxis

source:
   type: sls
   name: SLS Source
   endpoint: <endpoint>
   project: <project>
   logstore: <logstore>
   accessId: <accessId>
   accessKey: <accessKey>

Parámetros

Parámetro

Descripción

Tipo

Obligatorio

Predeterminado

Observaciones

type

El tipo de origen de datos.

String

Sí

Ninguna

El valor debe ser sls.

endpoint

El endpoint de Log Service (SLS).

String

Sí

Ninguna

La dirección de acceso VPC de Log Service (SLS). Para obtener más información, consulte Service Endpoints.

Nota
  • De forma predeterminada, Realtime Compute for Apache Flink no puede acceder a internet. Utilice un NAT Gateway para habilitar la comunicación entre su Virtual Private Cloud (VPC) e internet. Para obtener más información, consulte How can I access the internet?.

  • No se recomienda acceder a Log Service (SLS) a través de internet. Si es necesario hacerlo, utilice HTTPS y habilite transfer acceleration para SLS.

accessId

El AccessKey ID de su cuenta de Alibaba Cloud.

String

Sí

Ninguna

Para obtener más información, consulte How do I view the AccessKey ID and AccessKey secret information?.

Importante

Para evitar que se exponga la información de su AccessKey, se recomienda usar una variable de proyecto para especificar el valor del AccessKey. Para obtener más información, consulte Project variables.

accessKey

El AccessKey secret de su cuenta de Alibaba Cloud.

String

Sí

Ninguna

project

El nombre del proyecto de Log Service (SLS).

String

Sí

Ninguna

Ninguna

logStore

El nombre del logstore o Metricstore de SLS.

String

Sí

Ninguna

Los datos de un logstore se consumen de la misma manera que los de un Metricstore.

schema.inference.strategy

La estrategia de inference del esquema.

String

No

continuous

  • continuous: ejecuta la inference del esquema para cada registro de datos. Si los esquemas son incompatibles, se infiere un esquema más amplio y se genera un evento de cambio de esquema.

  • static: ejecuta la inference del esquema solo una vez cuando inicia el trabajo. Los datos posteriores se analizan con base en el esquema inicial y no se generan eventos de cambio de esquema.

maxPreFetchLogGroups

El número máximo de grupos de registros que se leen de cada fragmento para la inference inicial del esquema.

Integer

No

50

Antes de que el trabajo lea y procese los datos, el conector preconsume una cantidad específica de grupos de registros de cada fragmento para inicializar la información del esquema.

shardDiscoveryIntervalMs

El intervalo, en milisegundos, para descubrir dinámicamente los cambios en los fragmentos.

Long

No

60000

Establezca este parámetro con un valor negativo para deshabilitar la detección dinámica.

Nota

El valor debe ser mayor o igual a 60,000 milisegundos (1 minuto).

startupMode

El modo de inicio.

String

No

Ninguna

  • timestamp (predeterminado): consume los registros desde una marca de tiempo específica.

  • latest: consume los registros desde el desplazamiento más reciente.

  • earliest: consume los registros desde el desplazamiento más antiguo.

  • consumer_group: consume los registros desde el desplazamiento registrado en el grupo de consumidores. Si no hay un desplazamiento registrado para un fragmento, el consumo comienza desde el desplazamiento más antiguo.

startTime

La hora de inicio para el consumo de registros.

String

No

Hora actual

El formato es yyyy-MM-dd HH:mm:ss.

Este parámetro surte efecto únicamente cuando startupMode se establece en timestamp.

Nota

Los parámetros startTime y stopTime se basan en el atributo __receive_time__ de Log Service (SLS), no en el atributo __timestamp__.

stopTime

La hora de finalización para el consumo de registros.

String

No

Ninguna

El formato es yyyy-MM-dd HH:mm:ss.

Nota

Si desea que el trabajo de Flink termine después de consumir todos los registros, también debe establecer exitAfterFinish=true.

consumerGroup

El nombre del grupo de consumidores.

String

No

Ninguna

Un grupo de consumidores registra el progreso del consumo. Puede especificar cualquier nombre personalizado.

batchGetSize

El número de grupos de registros que se leen por solicitud.

Integer

No

100

El valor de batchGetSize no puede superar 1,000. De lo contrario, se produce un error.

maxRetries

El número de reintentos si falla la lectura de Log Service (SLS).

Integer

No

3

Ninguna

exitAfterFinish

Indica si el trabajo de Flink termina después de consumir todos los datos.

Boolean

No

false

  • true: el trabajo de Flink termina después de consumir todos los datos.

  • false (predeterminado): el trabajo de Flink no termina después de consumir todos los datos.

query

La instrucción de preprocesamiento para consumir datos de Log Service (SLS).

String

No

Ninguna

Utilice este parámetro para filtrar los datos en Log Service (SLS) antes del consumo. Esto permite ahorrar costos y mejorar la velocidad de procesamiento.

Por ejemplo, 'query' = '*| where request_method = ''GET''' filtra los datos donde el campo request_method es 'GET' antes de que Flink los lea.

Nota

La consulta debe usar la sintaxis SPL de Log Service. Para obtener más información, consulte SPL syntax.

Importante
  • Para conocer las regiones donde esta función está disponible en Log Service (SLS), consulte Consume logs based on rules.

  • Esta función se encuentra en versión Beta y no tiene costo. Es posible que en el futuro se cobre por su uso. Para obtener más información, consulte Pricing.

compressType

El tipo de compresión para Log Service (SLS).

String

No

Ninguna

Los tipos de compresión compatibles incluyen:

  • lz4

  • deflate

  • zstd

timeZone

La zona horaria para startTime y stopTime.

String

No

Ninguna

De forma predeterminada, no se agrega ningún desplazamiento.

regionId

La región donde se despliega Log Service (SLS).

String

No

Ninguna

Para obtener más información, consulte Supported regions.

signVersion

La versión de firma de la solicitud para Log Service (SLS).

String

No

Ninguna

Para obtener más información, consulte Request signatures.

shardModDivisor

El divisor que se utiliza al leer los fragmentos del logstore.

Int

No

-1

Para obtener más información, consulte Shards.

shardModRemainder

El residuo que se utiliza al leer los fragmentos del logstore.

Int

No

-1

Para obtener más información, consulte Shards.

metadata.list

Las columnas de metadatos que se pasan a los trabajos posteriores.

String

No

Ninguna

Los campos de metadatos disponibles incluyen __source__, __topic__, __timestamp__ y __tag__. Separe varios campos con una coma.

decode.table-id.fields

Especifica los campos cuyos valores se usan para generar un Table ID al analizar sintácticamente los datos de registro de Log Service (SLS).

String

No

Ninguna

Separe varios campos con una coma inglesa ,. Por ejemplo, si el registro de SLS de origen es {"col0":"a", "col1":"b", "col2":"c"}, los resultados para distintas configuraciones del parámetro son los siguientes:

Configuración

Table ID

Ninguna

Todos los mensajes son Project.Logstore

col0

a

col0,col1

a.b

col0,col1,col2

a.b.c

Nota

Este parámetro es compatible con las versiones 11.6 y posteriores de Realtime Compute for Apache Flink.

fixed-types

Especifica los tipos de datos de ciertos campos al analizar sintácticamente los datos de registro de Log Service (SLS).

String

No

Ninguna

Al analizar los datos, especifique los tipos de ciertos campos. Use una coma , para separar varias definiciones de campos. Por ejemplo, id BIGINT, name VARCHAR(10) define el tipo del campo id como BIGINT y el del campo name como VARCHAR(10).

Nota

Este parámetro es compatible con las versiones 11.6 y posteriores de Realtime Compute for Apache Flink.

timestamp-format.standard

El formato de los campos de marca de tiempo en los datos de registro de Log Service (SLS).

String

No

SQL

Valores válidos:

  • SQL: analiza las marcas de tiempo de entrada en el formato yyyy-MM-dd HH:mm:ss.s{precision} (por ejemplo, 2020-12-30 12:13:14.123) y las devuelve en el mismo formato.

  • ISO-8601: analiza las marcas de tiempo de entrada en el formato yyyy-MM-ddTHH:mm:ss.s{precision} (por ejemplo, 2020-12-30T12:13:14.123) y las devuelve en el mismo formato.

Nota

Este parámetro es compatible con las versiones 11.6 y posteriores de Realtime Compute for Apache Flink.

ingestion.ignore-errors

Indica si se ignoran los errores que ocurren durante el análisis de datos.

Boolean

No

false

Nota

Este parámetro es compatible con las versiones 11.6 y posteriores de Realtime Compute for Apache Flink.

ingestion.error-tolerance.max-count

Si ingestion.ignore-errors está habilitado, el trabajo falla cuando el número acumulado de errores supera este valor.

Integer

No

-1

Este parámetro surte efecto únicamente cuando ingestion.ignore-errors está habilitado. El valor predeterminado de -1 significa que el trabajo ignora todas las excepciones de análisis.

Nota

Este parámetro es compatible con las versiones 11.6 y posteriores de Realtime Compute for Apache Flink.

Reutilizar un catálogo existente

A partir de la versión 11.5 de Realtime Compute for Apache Flink, puede hacer referencia a un SLS Catalog integrado creado en la página Data Management dentro de los trabajos de ingesta de datos de Flink CDC. Esto evita tener que especificar manualmente las propiedades de conexión.

source:
  type: sls
  using.built-in-catalog: sls_catalog

Actualmente, los trabajos de ingesta de datos pueden reutilizar automáticamente los siguientes parámetros del SLS Catalog integrado:

  • endpoint

  • project

  • accessId

  • accessKey

Para anular estos parámetros reutilizados automáticamente, defínalos explícitamente en la configuración YAML. Los parámetros definidos en el archivo YAML tienen prioridad.

Mapeo de tipos de datos

Si no se configura fixed-types, se aplica el siguiente mapeo de tipos de datos:

Tipo de SLS

Tipo de CDC

STRING

STRING

Si se configura fixed-types, el sistema analiza los datos con los tipos especificados.

Inference y evolución del esquema

  • Preconsumo de datos de fragmentos e inicialización del esquema

    El conector de SLS mantiene el esquema del logstore del que lee. Antes de leer los datos del logstore, el conector preconsume hasta maxPreFetchLogGroups grupos de registros de cada fragmento. Analiza el esquema de cada entrada de registro y los combina para inicializar el esquema de la tabla. Luego, genera un evento de creación de tabla con base en este esquema inicial antes de comenzar el consumo de datos.

    Nota

    Para cada fragmento, el conector intenta consumir datos comenzando una hora antes de la hora actual para analizar el esquema del registro.

  • Información de clave primaria

    Los registros de Log Service (SLS) no contienen información de clave primaria. Agregue manualmente una clave primaria a la tabla mediante reglas de transformación:

    transform:
      - source-table: <project>.<logstore>
        projection: *
        primary-keys: key1, key2
  • Inference y cambios de esquema

    Una vez inicializado el esquema, si schema.inference.strategy se establece en static, el conector de SLS analiza cada entrada de registro con base en el esquema inicial y no genera eventos de cambio de esquema. Si schema.inference.strategy se establece en continuous, el conector analiza cada entrada de registro, deduce las columnas físicas y las compara con el esquema actual. Si el esquema inferido no coincide con el actual, los esquemas se combinan según las siguientes reglas:

    • Si las columnas físicas inferidas contienen campos que no están en el esquema actual, el conector agrega estos campos al esquema y genera un evento para añadir columnas anulables.

    • Si a las columnas físicas inferidas les faltan campos que existen en el esquema actual, el conector conserva dichos campos, llena sus datos con NULL y no genera un evento de eliminación de columnas.

    El conector de SLS deduce el tipo de datos de todos los campos en cada entrada de registro como String. Actualmente, solo se admite agregar nuevas columnas. El conector añade las columnas nuevas al final del esquema y las configura como anulables.

Ejemplos de código

  • SQL para tablas de origen y destino

    CREATE TEMPORARY TABLE sls_input(
      `time` BIGINT,
      url STRING,
      dt STRING,
      float_field FLOAT,
      double_field DOUBLE,
      boolean_field BOOLEAN,
      `__topic__` STRING METADATA VIRTUAL,
      `__source__` STRING METADATA VIRTUAL,
      `__timestamp__` STRING METADATA VIRTUAL,
       __tag__ MAP<VARCHAR, VARCHAR> METADATA VIRTUAL,
      proctime as PROCTIME()
    ) WITH (
      'connector' = 'sls',
      'endpoint' ='cn-hangzhou-intranet.log.aliyuncs.com',
      'accessId' = '${secret_values.ak_id}',
      'accessKey' = '${secret_values.ak_secret}',
      'starttime' = '2023-08-30 00:00:00',
      'project' ='sls-test',
      'logstore' ='sls-input'
    );
    
    CREATE TEMPORARY TABLE sls_sink(
      `time` BIGINT,
      url STRING,
      dt STRING,
      float_field FLOAT,
      double_field DOUBLE,
      boolean_field BOOLEAN,
      `__topic__` STRING,
      `__source__` STRING,
      `__timestamp__` BIGINT ,
      receive_time BIGINT
    ) WITH (
      'connector' = 'sls',
      'endpoint' ='cn-hangzhou-intranet.log.aliyuncs.com',
      'accessId' = '${ak_id}',
      'accessKey' = '${ak_secret}',
      'project' ='sls-test',
      'logstore' ='sls-output'
    );
    
    INSERT INTO sls_sink
    SELECT 
     `time`,
      url,
      dt,
      float_field,
      double_field,
      boolean_field,
      `__topic__` ,
      `__source__` ,
      `__timestamp__` ,
      cast(__tag__['__receive_time__'] as bigint) as receive_time
    FROM sls_input; 
  • Ingesta de datos con un origen de datos de SLS

    Utilice SLS como origen de datos para ingerir información en tiempo real hacia los sistemas posteriores compatibles. Por ejemplo, la siguiente configuración define un trabajo de ingesta de datos que escribe la información de un logstore en un lago de datos con formato Paimon en Data Lake Formation (DLF). El trabajo deduce automáticamente el esquema de la tabla de destino y admite la evolución del esquema en tiempo de ejecución.

source:
  type: sls
  name: SLS Source
  endpoint: ${endpoint}
  project: test_project
  logstore: test_log
  accessId: ${accessId}
  accessKey: ${accessKey}
   
# Add a primary key to the table.
transform:
  - source-table: \.*.\.*
    projection: \*
    primary-keys: id
    
# Route all data from test_project.test_log to the test_database.inventory table.
route:
  - source-table: test_project.test_log
    sink-table: test_database.inventory

sink:
  type: paimon
  catalog.properties.metastore: rest
  catalog.properties.uri: dlf_uri
  catalog.properties.warehouse: your_warehouse
  catalog.properties.token.provider: dlf
  # (Optional) Enable deletion vectors to improve read performance.
  table.properties.deletion-vectors.enabled: true

API de DataStream

Importante

Para leer o escribir datos con la API de DataStream, utilice un conector de DataStream. Para obtener más información, consulte Usage of DataStream connectors.

Si usa una versión de VVR anterior a la 8.0.10, es posible que su trabajo no inicie debido a dependencias faltantes. Para resolver este problema, agregue el uber-JAR correspondiente como dependencia adicional.

Leer desde SLS

Realtime Compute for Apache Flink proporciona la clase SlsSourceFunction, una implementación de SourceFunction, para leer datos de Simple Log Service (SLS). En el siguiente ejemplo se leen datos de SLS.

public class SlsDataStreamSource {

    public static void main(String[] args) throws Exception {
        // Sets up the streaming execution environment
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // Creates an SLS source and prints the data to the console.
        env.addSource(createSlsSource())
                .map(SlsDataStreamSource::convertMessages)
                .print();
        env.execute("SLS Stream Source");
    }

    private static SlsSourceFunction createSlsSource() {
        SLSAccessInfo accessInfo = new SLSAccessInfo();
        accessInfo.setEndpoint("yourEndpoint");
        accessInfo.setProjectName("yourProject");
        accessInfo.setLogstore("yourLogStore");
        accessInfo.setAccessId("yourAccessId");
        accessInfo.setAccessKey("yourAccessKey");

        // The batch get size is required.
        accessInfo.setBatchGetSize(10);

        // Optional parameters
        accessInfo.setConsumerGroup("yourConsumerGroup");
        accessInfo.setMaxRetries(3);

        // Start time for consumption, set to the current time.
        int startInSec = (int) (new Date().getTime() / 1000);

        // Stop time for consumption, where -1 means never stop.
        int stopInSec = -1;

        return new SlsSourceFunction(accessInfo, startInSec, stopInSec);
    }

    private static List<String> convertMessages(SourceRecord input) {
        List<String> res = new ArrayList<>();
        for (FastLogGroup logGroup : input.getLogGroups()) {
            int logsCount = logGroup.getLogsCount();
            for (int i = 0; i < logsCount; i++) {
                FastLog log = logGroup.getLogs(i);
                int fieldCount = log.getContentsCount();
                for (int idx = 0; idx < fieldCount; idx++) {
                    FastLogContent f = log.getContents(idx);
                    res.add(String.format("key: %s, value: %s", f.getKey(), f.getValue()));
                }
            }
        }
        return res;
    }
}

Escribir en SLS

Realtime Compute for Apache Flink proporciona la clase SLSOutputFormat, una implementación de OutputFormat, para escribir datos en SLS. En el siguiente ejemplo se escriben datos en SLS.

public class SlsDataStreamSink {

    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.fromSequence(0, 100)
                .map((MapFunction<Long, SinkRecord>) aLong -> getSinkRecord(aLong))
                .addSink(createSlsSink())
                .name(SlsDataStreamSink.class.getSimpleName());
        env.execute("SLS Stream Sink");
    }

    private static OutputFormatSinkFunction createSlsSink() {
        Configuration conf = new Configuration();
        conf.setString(SLSOptions.ENDPOINT, "yourEndpoint");
        conf.setString(SLSOptions.PROJECT, "yourProject");
        conf.setString(SLSOptions.LOGSTORE, "yourLogStore");
        conf.setString(SLSOptions.ACCESS_ID, "yourAccessId");
        conf.setString(SLSOptions.ACCESS_KEY, "yourAccessKey");
        SLSOutputFormat outputFormat = new SLSOutputFormat(conf);
        return new OutputFormatSinkFunction<>(outputFormat);
    }

    private static SinkRecord getSinkRecord(Long seed) {
        SinkRecord record = new SinkRecord();
        LogItem logItem = new LogItem((int) (System.currentTimeMillis() / 1000));
        logItem.PushBack("level", "info");
        logItem.PushBack("name", String.valueOf(seed));
        logItem.PushBack("message", "it's a test message for " + seed.toString());
        record.setContent(logItem);
        return record;
    }

}

XML

El conector de DataStream de SLS está disponible en el repositorio central de Maven.

<dependency>
    <groupId>com.alibaba.ververica</groupId>
    <artifactId>ververica-connector-sls</artifactId>
    <version>${vvr-version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-format-common</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Preguntas frecuentes

How to resolve a TaskManager OOM (java.lang.OutOfMemoryError: Java heap space) when restoring a failed Flink program?