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 |
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 parallelismcon 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 defailoverfalle 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.
ImportantePara 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.NotaEste 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
trueen 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
consumerGrouppara registrar el progreso de consumo en el grupo de consumidores de SLS. Luego, establezca la opciónconsumeFromCheckpointentruey 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
enableNewSourcese establece entrue. -
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
consumeFromCheckpointentrue. 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
startupModese establece entimestamp.NotaLas opciones
startTimeystopTimese 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
exitAfterFinishentrue.
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.
NotaCada 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.
ImportanteEste parámetro ya no es compatible con VVR 11.1 y versiones posteriores. En estas versiones, debe establecer la opción
startupModeenconsumer_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
batchGetSizeno 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
ImportanteEsta 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 camporequest_methodes 'GET'.NotaEsta 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
querycomoprocessor,querytiene prioridad yprocessorse 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
processoren lugar dequery.Por ejemplo,
'processor' = 'test-filter-processor'indica que el procesador de SLS filtra los datos antes de que Flink los lea desde SLS.NotaEsta 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.
ImportanteEsta 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
enableNewSourcese establece entrue.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
enableNewSourcese establece entrue.
-
-
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
INTexistente 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.
NotaEsta 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 |
||||||||||
|
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
|
||||||||||
|
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 |
|
||||||||||
|
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 |
|
||||||||||
|
startTime |
La hora de inicio para el consumo de registros. |
String |
No |
Hora actual |
El formato es Este parámetro surte efecto únicamente cuando Nota
Los parámetros |
||||||||||
|
stopTime |
La hora de finalización para el consumo de registros. |
String |
No |
Ninguna |
El formato es Nota
Si desea que el trabajo de Flink termine después de consumir todos los registros, también debe establecer |
||||||||||
|
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 |
|
||||||||||
|
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, Nota
La consulta debe usar la sintaxis SPL de Log Service. Para obtener más información, consulte SPL syntax. Importante
|
||||||||||
|
compressType |
El tipo de compresión para Log Service (SLS). |
String |
No |
Ninguna |
Los tipos de compresión compatibles incluyen:
|
||||||||||
|
timeZone |
La zona horaria para |
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 |
||||||||||
|
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
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 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:
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 |
Integer |
No |
-1 |
Este parámetro surte efecto únicamente cuando 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
maxPreFetchLogGroupsgrupos 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.NotaPara 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 encontinuous, 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
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>