Realtime Compute for Apache Flink lee los datos de registro de Simple Log Service al crear una tabla de origen. Este tema abarca la creación de tablas de origen y la extracción de campos de atributos.
Capacidades compatibles
Realtime Compute for Apache Flink es compatible con las siguientes capacidades de consumo de registros.
|
Categoría |
Descripción |
|
Tipo compatible |
Tabla de origen y tabla de resultados. |
|
Modo de ejecución |
Solo modo de streaming. |
|
Métrica |
No compatible. |
|
Formato de datos |
Ninguno. |
|
Tipo de API |
SQL. |
|
Operaciones de tabla de resultados |
Solo inserción. No se admiten actualizaciones ni eliminaciones. |
Para comenzar a consumir datos de registro, siga Getting started with a Flink SQL deployment.
Requisitos previos
Si utiliza un usuario o rol de RAM, asegúrese de que tenga los permisos obligatorios en la consola de Realtime Compute for Apache Flink. Para obtener más información, consulte Permissions.
Se creó un espacio de trabajo de Realtime Compute for Apache Flink. Para obtener más información, consulte Activate Realtime Compute for Apache Flink.
Se crearon un proyecto y un logstore. 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 establezca el valor de
source parallelismpor encima del número de shards, ya que esto desperdicia recursos. Además, en Ververica Runtime (VVR) 8.0.5 y versiones anteriores, un cambio en el número de shards puede provocar que la función automática defailoverfalle e impida el consumo de algunos shards.
Creación de una tabla de origen y una tabla de resultados
Antes de consumir datos de registro, desarrolle un borrador SQL completo que contenga una tabla de origen y una tabla de resultados. Después del procesamiento, los resultados se insertan en la tabla de resultados mediante la instrucción INSERT INTO.
Para obtener más información sobre cómo desarrollar un borrador SQL en Realtime Compute for Apache Flink, consulte Job development overview.
Simple Log Service almacena los datos de registro en tiempo real y Realtime Compute for Apache Flink los lee en modo de streaming. A continuación se muestra un ejemplo de entrada de registro:
__source__: 11.85.*.199
__tag__:__receive_time__: 1562125591
__topic__: test-topic
request_method: GET
status: 200
Código de ejemplo
En el siguiente ejemplo de borrador SQL se consumen datos de Simple Log Service en Realtime Compute for Apache Flink.
Si los nombres de tablas, columnas o campos reservados entran en conflicto entre sí, enciérrelos entre comillas invertidas (`).
CREATE TEMPORARY TABLE sls_input(
request_method STRING,
status BIGINT,
`__topic__` STRING METADATA VIRTUAL,
`__source__` STRING METADATA VIRTUAL,
`__timestamp__` BIGINT 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(
request_method STRING,
status BIGINT,
`__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
request_method,
status,
`__topic__` ,
`__source__` ,
`__timestamp__` ,
cast(__tag__['__receive_time__'] as bigint) as receive_time
FROM sls_input;
Opciones WITH
-
Generales
Parámetro
Descripción
Tipo
Obligatorio
Predeterminado
Observaciones
connector
El conector que se va a utilizar.
String
Sí
Ninguno
Establezca este valor en
sls.endPoint
El endpoint de Log Service (SLS).
String
Sí
Ninguno
Especifique la dirección de acceso de VPC de Log Service (SLS). Para obtener más información, consulte Service endpoints.
NotaDe forma predeterminada, Realtime Compute for Apache Flink no puede acceder 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 debe 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í
Ninguno
N/D
logStore
El nombre del logstore o MetricStore.
String
Sí
Ninguno
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í
Ninguno
Para obtener más información, consulte Obtain an AccessKey pair.
ImportantePara evitar que su par de AccessKey quede expuesto, se recomienda utilizar 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í
Ninguno
akless.assume-role.role-name
El nombre del rol de RAM que se utiliza para acceder a SLS.
String
No
Ninguno
Si no se especifican accessId y accessKey, debe indicar 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 manera más uniforme posible entre todas las subtareas de origen.
ImportanteEsta 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, inicie primero 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.
NotaEl valor debe ser mayor o igual a 60 000 milisegundos (1 minuto).
Esta opción surte efecto solo 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 los registros a partir de la hora de inicio especificada.latest: comienza a consumir los registros desde el desplazamiento más reciente.earliest: comienza a consumir los 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.
ImportanteEn 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.Surte efecto solo 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
Ninguno
El formato es
yyyy-MM-dd hh:mm:ss.NotaEsta opción se usa únicamente para consumir registros históricos y debe configurarse con una hora pasada. Si la establece en una hora futura, el consumo podría detenerse antes de tiempo cuando no se escriban registros nuevos. 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
Ninguno
Un grupo de consumidores sirve para registrar el progreso de consumo. Especifique un nombre personalizado sin un formato fijo.
NotaLos distintos trabajos de Flink deben usar grupos de consumidores diferentes. 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 este servicio. 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 los registros desde el punto de control guardado en dicho grupo. Si el grupo de consumidores no tiene un punto de control correspondiente, el consumo se 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 dichas versiones, debe establecer la opción
startupModeenconsumer_group.maxRetries
El número de reintentos tras un intento fallido de lectura de 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
Ninguno
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 que Flink lea los datos de SLS, primero busca aquellos donde el valor del camporequest_methodsea 'GET'.NotaEsta opción utiliza el lenguaje SPL de Log Service (SLS). Para obtener más información, consulte SPL syntax.
ImportanteEsta 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
Ninguno
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 utilizar
processoren lugar dequery.Por ejemplo,
'processor' = 'test-filter-processor'indica que el procesador de SLS filtra los datos antes de que Flink los lea.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 dichos bytes. Los demás campos siguen utilizando la lógica de conversión predeterminada. Este comportamiento coincide con el del origen anterior.
NotaEsta opción solo es compatible con VVR 11.8 y versiones posteriores.
Esta opción surte efecto solo 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
Ninguno
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
Ninguno
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 dirijan al mismo shard.
String
No
Ninguno
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 de shards. De lo contrario, es posible que algunos shards no reciban 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.
Extracción de campos de atributos
Además de los campos de registro y los campos personalizados, Realtime Compute for Apache Flink puede extraer los siguientes campos de atributos.
|
Campo |
Tipo |
Descripción |
|
__source__ |
STRING METADATA VIRTUAL |
El origen del mensaje. |
|
__topic__ |
STRING METADATA VIRTUAL |
El tema del mensaje. |
|
__timestamp__ |
BIGINT METADATA VIRTUAL |
La hora del registro. |
|
__tag__ |
MAP<VARCHAR, VARCHAR> METADATA VIRTUAL |
La etiqueta del mensaje. Para el atributo |
Para extraer campos de atributos, defina encabezados en su instrucción SQL. Ejemplo:
create table sls_stream(
__timestamp__ bigint HEADER,
__receive_time__ bigint HEADER
b int,
c varchar
) with (
'connector' = 'sls',
'endpoint' ='cn-hangzhou.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'
);
Referencias
Para obtener más información sobre cómo usar la DataStream API de Realtime Compute for Apache Flink para consumir datos de registro, consulte DataStream API.