Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:Log Service (SLS)

Dernière mise à jour :Sep 21, 2026

Découvrez comment utiliser le connecteur Log Service (SLS).

Contexte

Simple Log Service est un service de bout en bout dédié aux données de journal. Il vous aide à collecter, consommer, acheminer, interroger et analyser efficacement les données de journal. Cela améliore l'efficacité des opérations et de la maintenance (O&M) et vous permet de traiter des volumes massifs de données de journal.

Le tableau suivant répertorie les fonctionnalités du connecteur SLS.

Catégorie

Description

Types pris en charge

Table source et table de destination

Mode d'exécution

Mode streaming uniquement

Métriques spécifiques au connecteur

S/O

Format des données

S/O

Type d'API

SQL, DataStream API et API YAML d'ingestion de données

Mise à jour ou suppression des données dans la table de destination

Les tables de destination sont en ajout seul ; vous ne pouvez pas mettre à jour ni supprimer les données.

Fonctionnalités

Le connecteur source SLS lit directement les champs d'attribut de message. Le tableau suivant répertorie les champs pris en charge.

Paramètre

Type

Description

__source__

STRING METADATA VIRTUAL

Source du message.

__topic__

STRING METADATA VIRTUAL

Rubrique du message.

__timestamp__

BIGINT METADATA VIRTUAL

Heure du journal.

__tag__

MAP<VARCHAR, VARCHAR> METADATA VIRTUAL

Tag du message.

Par exemple, pour l'attribut "__tag__:__receive_time__":"1616742274", '__receive_time__' et '1616742274' sont stockés sous forme de paire clé-valeur dans la map. Pour accéder à la valeur en SQL, utilisez __tag__['__receive_time__'].

Prérequis

Assurez-vous d'avoir créé un projet Log Service et un Logstore. Pour plus d'informations, consultez la rubrique Créer un projet et un Logstore.

Limites

  • Seuls Ververica Runtime (VVR) 11.1 et les versions ultérieures prennent en charge l'utilisation de SLS comme source synchrone pour l'ingestion de données définie en YAML.

  • Le connecteur SLS garantit uniquement la sémantique « au moins une fois » (at-least-once).

  • Ne définissez pas le paramètre source parallelism sur une valeur supérieure au nombre de shards, car cela gaspille des ressources. De plus, pour Ververica Runtime (VVR) 8.0.5 et les versions antérieures, une modification du nombre de shards peut entraîner l'échec de la fonctionnalité automatique de failover, empêchant la consommation de certains shards.

SQL

Syntaxe

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

Avec options

  • Général

    Paramètre

    Description

    Type

    Obligatoire

    Valeur par défaut

    Remarques

    connector

    Le connecteur à utiliser.

    String

    Oui

    Aucun

    Définissez ce paramètre sur sls.

    endPoint

    L'endpoint de Log Service (SLS).

    String

    Oui

    Aucun

    Spécifiez l'adresse d'accès VPC de Log Service (SLS). Pour plus d'informations, consultez la rubrique Endpoints de service.

    Remarque
    • Par défaut, Realtime Compute for Apache Flink ne peut pas accéder à Internet. Pour activer l'accès à Internet depuis votre Virtual Private Cloud (VPC), utilisez une passerelle NAT. Pour plus d'informations, consultez la rubrique Comment accéder à Internet ?.

    • Nous vous déconseillons d'accéder à SLS via Internet. Si cela est indispensable, utilisez HTTPS et activez l'accélération du transfert. Pour plus d'informations, consultez la rubrique Gérer l'accélération du transfert.

    project

    Le nom du projet SLS.

    String

    Oui

    Aucun

    S/O

    logStore

    Le nom du Logstore ou du MetricStore.

    String

    Oui

    Aucun

    Les données d'un Logstore sont consommées de la même manière que celles d'un MetricStore.

    accessId

    L'AccessKey ID de votre compte Alibaba Cloud.

    String

    Oui

    Aucun

    Pour plus d'informations, consultez la rubrique Obtenir une paire de clés AccessKey.

    Important

    Pour éviter l'exposition de votre paire de clés AccessKey, nous vous recommandons d'utiliser des variables pour spécifier l'AccessKey ID et l'AccessKey secret. Pour plus d'informations, consultez la rubrique Variables de projet.

    accessKey

    L'AccessKey secret de votre compte Alibaba Cloud.

    String

    Oui

    Aucun

    akless.assume-role.role-name

    Le nom du rôle RAM utilisé pour accéder à SLS.

    String

    Non

    Aucun

    Si les paramètres accessId et accessKey ne sont pas spécifiés, vous devez définir ce paramètre pour accéder aux ressources SLS à l'aide d'un rôle RAM.

    Le rôle RAM doit être référencé au préalable sous Access Security/RAM Roles.

    Remarque

    Ce paramètre est pris en charge uniquement dans les versions VVR 11.9.0 et ultérieures.

  • Spécifique à la source

    Paramètre

    Description

    Type

    Obligatoire

    Valeur par défaut

    Remarques

    enableNewSource

    Indique s'il faut utiliser la nouvelle source de données qui implémente l'interface FLIP-27.

    Boolean

    Non

    false

    La nouvelle source peut s'adapter automatiquement aux modifications des shards et répartir ces derniers de manière aussi équitable que possible entre toutes les sous-tâches de la source.

    Important
    • Cette option est prise en charge uniquement dans les versions VVR 8.0.9 et ultérieures. La valeur par défaut est true pour les versions VVR 11.1 et ultérieures.

    • Si vous modifiez la valeur de cette option, vous ne pouvez pas restaurer les tâches à partir d'un état enregistré. Pour reprendre la consommation à partir d'un offset historique, commencez par démarrer la tâche avec l'option consumerGroup afin d'enregistrer la progression de la consommation dans le groupe de consommateurs SLS. Ensuite, définissez l'option consumeFromCheckpoint sur true et redémarrez la tâche sans état.

    • Si un Logstore contient des shards en lecture seule, certaines sous-tâches peuvent continuer à demander des données provenant d'autres shards après avoir terminé leur propre traitement. Cela peut entraîner un déséquilibre de la charge de travail, affectant ainsi les performances. Pour atténuer ce problème, vous pouvez ajuster le parallélisme, optimiser la stratégie de planification ou fusionner les petits shards afin de réduire leur nombre et de simplifier l'allocation des tâches.

    shardDiscoveryIntervalMs

    L'intervalle pour la découverte dynamique des shards.

    Long

    Non

    60000

    Définissez cette option sur une valeur négative pour désactiver la découverte dynamique. Unité : millisecondes.

    Remarque
    • La valeur doit être supérieure ou égale à 60 000 millisecondes (1 minute).

    • Cette option prend effet uniquement lorsque enableNewSource est défini sur true.

    • Cette option est prise en charge uniquement dans les versions VVR 8.0.9 et ultérieures.

    startupMode

    Le mode de démarrage pour la table source.

    String

    Non

    timestamp

    • timestamp (par défaut) : Consomme les journaux à partir de l'heure de début spécifiée.

    • latest : Commence à consommer les journaux à partir du dernier offset.

    • earliest : Commence à consommer les journaux à partir du premier offset.

    • consumer_group : Commence la consommation des journaux à partir de l'offset enregistré par le groupe de consommateurs. Si le groupe de consommateurs n'a enregistré aucun offset de consommation pour un shard, la consommation commence à partir du premier offset.

    Important
    • Pour les versions VVR antérieures à 11,1, la valeur consumer_group n'est pas prise en charge. Vous devez définir consumeFromCheckpoint sur true. Dans ce cas, la consommation des journaux commence à partir de l'offset enregistré par le groupe de consommateurs spécifié, et le paramètre de mode de démarrage ne prend pas effet.

    startTime

    L'heure de début de la consommation des journaux.

    String

    Non

    Heure actuelle

    Le format est yyyy-MM-dd hh:mm:ss.

    Cela prend effet uniquement lorsque startupMode est défini sur timestamp.

    Remarque

    Les options startTime et stopTime sont basées sur l'attribut __receive_time__ dans SLS, plutôt que sur l'attribut __timestamp__.

    stopTime

    L'heure de fin de la consommation des journaux.

    String

    Non

    Aucun

    Le format est yyyy-MM-dd hh:mm:ss.

    Remarque
    • Cette option est utilisée uniquement pour la consommation de journaux historiques et doit être définie sur une heure passée. Si vous la définissez sur une heure future, la consommation risque de s'arrêter prématurément si aucun nouveau journal n'est écrit, ce qui entraîne une interruption du flux de données sans message d'erreur.

    • Si vous souhaitez que la tâche Flink se termine après la consommation de tous les journaux, vous devez également définir exitAfterFinish sur true.

    consumerGroup

    Le nom du groupe de consommateurs.

    String

    Non

    Aucun

    Un groupe de consommateurs sert à enregistrer la progression de la consommation. Vous pouvez spécifier un nom personnalisé sans format fixe.

    Remarque

    Différentes tâches Flink doivent utiliser des groupes de consommateurs distincts. Si plusieurs tâches Flink utilisent le même groupe de consommateurs, elles ne se coordonnent pas et chaque tâche consomme toutes les données. En effet, Flink n'utilise pas le groupe de consommateurs SLS pour l'attribution des partitions lors de la consommation des données depuis SLS. Par conséquent, chaque consommateur traite les messages indépendamment, même s'ils partagent le même groupe de consommateurs.

    consumeFromCheckpoint

    Indique s'il faut consommer à partir d'un point de contrôle du groupe de consommateurs.

    String

    Non

    false

    • true : Vous devez également spécifier un groupe de consommateurs. Le programme Flink commence à consommer les journaux à partir du point de contrôle enregistré dans le groupe de consommateurs. Si le groupe de consommateurs ne dispose pas de point de contrôle correspondant, la consommation commence à partir de la valeur configurée pour startTime.

    • false (valeur par défaut) : Ne commence pas à consommer les journaux à partir du point de contrôle enregistré pour le groupe de consommateurs spécifié.

    Important

    Ce paramètre n'est plus pris en charge dans les versions VVR 11.1 et ultérieures. Pour ces versions, vous devez définir l'option startupMode sur consumer_group.

    maxRetries

    Le nombre de tentatives après un échec de lecture depuis SLS.

    String

    Non

    3

    S/O

    batchGetSize

    Le nombre de groupes de journaux à lire en une seule requête.

    String

    Non

    100

    Le paramètre batchGetSize ne peut pas dépasser 1 000, sinon une erreur est signalée.

    exitAfterFinish

    Indique si la tâche Flink se termine après la consommation de toutes les données.

    String

    Non

    false

    • true : Le programme Flink se termine après la consommation de toutes les données.

    • false (par défaut) : Le programme Flink ne se termine pas après la consommation des données.

    query

    Important

    Cette option a été dépréciée dans la version VVR 11.3, mais les versions ultérieures restent compatibles.

    L'instruction de requête pour le prétraitement des données avant la consommation.

    String

    Non

    Aucun

    Utilisez cette option pour filtrer les données SLS avant leur consommation par Flink. Cela permet de réduire les coûts et d'améliorer la vitesse de traitement.

    Par exemple, 'query' = '*| where request_method = ''GET''' indique qu'avant que Flink ne lise les données depuis SLS, il filtre d'abord les données dont la valeur du champ request_method est « GET ».

    Remarque

    Cette option utilise le langage SPL de Log Service (SLS). Pour plus d'informations, consultez la rubrique Syntaxe SPL.

    Important
    • Cette option est prise en charge uniquement dans les versions VVR 8.0.1 et ultérieures.

    • Cette fonctionnalité engendre des frais Log Service (SLS). Pour plus d'informations, consultez la rubrique Facturation de Log Service.

    processor

    Le nom du processeur SLS pour le prétraitement des données. Si les paramètres query et processor sont tous deux spécifiés, query est prioritaire et processor est ignoré.

    String

    Non

    Aucun

    Cette option filtre les données SLS avant leur consommation par Flink, ce qui réduit les coûts et améliore la vitesse de traitement. Nous vous recommandons d'utiliser processor plutôt que query.

    Par exemple, 'processor' = 'test-filter-processor' indique que le processeur SLS filtre les données avant que Flink ne les lise depuis SLS.

    Remarque

    Cette option utilise le langage SPL de Log Service (SLS). Pour plus d'informations, consultez la rubrique Syntaxe SPL. Pour savoir comment créer ou mettre à jour un processeur SLS, consultez la rubrique Gérer les processeurs.

    Important

    Cette option est prise en charge uniquement dans les versions VVR 11.3 et ultérieures.

    Cette fonctionnalité engendre des frais Log Service (SLS). Pour plus d'informations, consultez la rubrique Facturation de Log Service.

    preserveRawBytes

    Indique s'il faut récupérer et conserver directement les octets bruts transportés par SLS lorsque enableNewSource est défini sur true.

    Boolean

    Non

    false

    Lorsque cette option est activée, les champs BINARY/VARBINARY lisent directement le tableau d'octets brut (byte[]), tandis que les champs CHAR/VARCHAR construisent les données de chaîne à partir des octets bruts. Les autres champs utilisent toujours la logique de conversion par défaut. Le comportement est cohérent avec celui de l'ancienne source.

    Remarque
    • Cette option est prise en charge uniquement dans les versions VVR 11.8 et ultérieures.

    • Cette option prend effet uniquement lorsque enableNewSource est défini sur true.

  • Spécifique au sink

    Paramètre

    Description

    Type

    Obligatoire

    Valeur par défaut

    Remarques

    topicField

    Spécifie un champ dont la valeur remplace l'attribut __topic__, qui indique le sujet du journal.

    String

    Non

    Aucun

    La valeur de cette option doit correspondre à un champ existant dans la table.

    timeField

    Spécifie un champ dont la valeur remplace l'attribut __timestamp__, qui indique l'heure d'écriture du journal.

    String

    Non

    Heure actuelle

    La valeur de cette option doit correspondre à un champ INT existant dans la table. Si cette option n'est pas spécifiée, l'heure actuelle est utilisée.

    sourceField

    Spécifie un champ dont la valeur remplace l'attribut __source__, qui indique la source du journal, telle que l'adresse IP de la machine ayant généré le journal.

    String

    Non

    Aucun

    La valeur de cette option doit correspondre à un champ existant dans la table.

    partitionField

    Spécifie un champ pour le partitionnement. Un hachage de la valeur de ce champ détermine le shard qui reçoit les données, garantissant que les enregistrements ayant le même hachage sont dirigés vers le même shard.

    String

    Non

    Aucun

    Si cette option n'est pas spécifiée, chaque enregistrement est écrit aléatoirement dans un shard disponible.

    buckets

    Si partitionField est spécifié, cette option définit le nombre de buckets pour le mappage des valeurs de hachage.

    String

    Non

    64

    La valeur doit être une puissance de 2 comprise dans l'intervalle [1, 256]. Le nombre de buckets doit être supérieur ou égal au nombre de shards. Sinon, certains shards risquent de ne recevoir aucune donnée.

    flushIntervalMs

    L'intervalle d'écriture des données.

    String

    Non

    2000

    Unité : millisecondes.

    writeNullProperties

    Indique s'il faut écrire les valeurs nulles sous forme de chaînes vides dans SLS.

    Boolean

    Non

    true

    • true (valeur par défaut) : Écrit les valeurs nulles dans le journal sous forme de chaînes vides.

    • false : Les champs évalués comme nuls ne sont pas écrits dans le journal.

    Remarque

    Cette option est prise en charge uniquement dans les versions VVR 8.0.6 et ultérieures.

Correspondances de types

Type Flink

Type SLS

BOOLEAN

STRING

VARBINARY

VARCHAR

TINYINT

INTEGER

BIGINT

FLOAT

DOUBLE

DECIMAL

Ingestion de données (bêta)

Limites

Cette fonctionnalité est prise en charge uniquement par les versions 11.1 et ultérieures de Realtime Compute for Apache Flink.

Syntaxe

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

Paramètres

Paramètre

Description

Type

Obligatoire

Valeur par défaut

Remarques

type

Le type de la source de données.

String

Oui

Aucune

La valeur doit être sls.

endpoint

L'endpoint de Log Service (SLS).

String

Oui

Aucune

L'adresse d'accès VPC de Log Service (SLS). Pour plus d'informations, consultez Endpoints de service.

Remarque
  • Par défaut, Realtime Compute for Apache Flink ne peut pas accéder à Internet. Vous pouvez utiliser une passerelle NAT pour permettre la communication entre votre Virtual Private Cloud (VPC) et Internet. Pour plus d'informations, consultez Comment accéder à Internet ?.

  • Nous vous déconseillons d'accéder à Log Service (SLS) via Internet. Si cela est indispensable, utilisez HTTPS et activez l'accélération de transfert pour SLS.

accessId

L'AccessKey ID de votre compte Alibaba Cloud.

String

Oui

Aucune

Pour plus d'informations, consultez Comment consulter l'AccessKey ID et l'AccessKey secret ?.

Important

Pour éviter toute exposition de vos informations AccessKey, nous vous recommandons d'utiliser une variable de projet pour spécifier la valeur de l'AccessKey. Pour plus d'informations, consultez Variables de projet.

accessKey

L'AccessKey secret de votre compte Alibaba Cloud.

String

Oui

Aucune

project

Le nom du projet Log Service (SLS).

String

Oui

Aucune

Aucune

logStore

Le nom du Logstore ou du Metricstore SLS.

String

Oui

Aucune

Les données d'un Logstore sont consommées de la même manière que celles d'un Metricstore.

schema.inference.strategy

La stratégie d'inférence de schéma.

String

Non

continuous

  • continuous : Effectue une inférence de schéma pour chaque enregistrement de données. Si les schémas sont incompatibles, un schéma plus large est inféré et un événement de modification de schéma est généré.

  • static : Effectue une inférence de schéma uniquement une fois au démarrage du job. Les données suivantes sont analysées selon le schéma initial et aucun événement de modification de schéma n'est généré.

maxPreFetchLogGroups

Le nombre maximal de groupes de journaux à lire depuis chaque shard pour l'inférence initiale du schéma.

Integer

Non

50

Avant que le job ne lise et ne traite les données, le connecteur pré-consomme un nombre spécifié de groupes de journaux depuis chaque shard pour initialiser les informations de schéma.

shardDiscoveryIntervalMs

L'intervalle, en millisecondes, pour la découverte dynamique des modifications de shard.

Long

Non

60000

Définissez ce paramètre sur une valeur négative pour désactiver la découverte dynamique.

Remarque

La valeur doit être supérieure ou égale à 60 000 millisecondes (1 minute).

startupMode

Le mode de démarrage.

String

Non

Aucune

  • timestamp (par défaut) : Consomme les journaux à partir d'un horodatage spécifique.

  • latest : Consomme les journaux à partir du dernier offset.

  • earliest : Consomme les journaux à partir du premier offset.

  • consumer_group : Consomme les journaux à partir de l'offset enregistré dans le groupe de consommateurs. Si aucun offset n'est enregistré pour un shard, la consommation commence à partir du premier offset.

startTime

L'heure de début de la consommation des journaux.

String

Non

Heure actuelle

Le format est yyyy-MM-dd HH:mm:ss.

Ce paramètre prend effet uniquement lorsque startupMode est défini sur timestamp.

Remarque

Les paramètres startTime et stopTime sont basés sur l'attribut __receive_time__ de Log Service (SLS), et non sur l'attribut __timestamp__.

stopTime

L'heure de fin de la consommation des journaux.

String

Non

Aucune

Le format est yyyy-MM-dd HH:mm:ss.

Remarque

Si vous souhaitez que le job Flink se termine après la consommation de tous les journaux, vous devez également définir exitAfterFinish=true.

consumerGroup

Le nom du groupe de consommateurs.

String

Non

Aucune

Un groupe de consommateurs enregistre la progression de la consommation. Vous pouvez spécifier n'importe quel nom personnalisé.

batchGetSize

Le nombre de groupes de journaux à lire par requête.

Integer

Non

100

La valeur de batchGetSize ne peut pas dépasser 1 000. Dans le cas contraire, une erreur se produit.

maxRetries

Le nombre de tentatives en cas d'échec de la lecture depuis Log Service (SLS).

Integer

Non

3

Aucune

exitAfterFinish

Indique si le job Flink se termine après la consommation de toutes les données.

Boolean

Non

false

  • true : Le job Flink se termine après la consommation de toutes les données.

  • false (par défaut) : Le job Flink ne se termine pas après la consommation de toutes les données.

query

L'instruction de prétraitement pour la consommation des données depuis Log Service (SLS).

String

Non

Aucune

Utilisez ce paramètre pour filtrer les données dans Log Service (SLS) avant la consommation afin de réduire les coûts et d'améliorer la vitesse de traitement.

Par exemple, 'query' = '*| where request_method = ''GET''' filtre les données dont le champ request_method est « GET » avant leur lecture par Flink.

Remarque

La requête doit utiliser la syntaxe SPL de Log Service. Pour plus d'informations, consultez Syntaxe SPL.

Important
  • Pour connaître les régions où cette fonctionnalité est disponible dans Log Service (SLS), consultez Consommer des journaux selon des règles.

  • Cette fonctionnalité est en version bêta et gratuite. Elle pourrait devenir payante à l'avenir. Pour plus d'informations, consultez Tarification.

compressType

Le type de compression pour Log Service (SLS).

String

Non

Aucune

Les types de compression pris en charge incluent :

  • lz4

  • deflate

  • zstd

timeZone

Le fuseau horaire pour startTime et stopTime.

String

Non

Aucune

Par défaut, aucun décalage n'est ajouté.

regionId

La région où Log Service (SLS) est déployé.

String

Non

Aucune

Pour plus d'informations, consultez Régions prises en charge.

signVersion

La version de signature de requête pour Log Service (SLS).

String

Non

Aucune

Pour plus d'informations, consultez Signatures de requête.

shardModDivisor

Le diviseur utilisé lors de la lecture depuis les shards du Logstore.

Int

Non

-1

Pour plus d'informations, consultez Shards.

shardModRemainder

Le reste utilisé lors de la lecture depuis les shards du Logstore.

Int

Non

-1

Pour plus d'informations, consultez Shards.

metadata.list

Les colonnes de métadonnées à transmettre aux jobs en aval.

String

Non

Aucune

Les champs de métadonnées disponibles incluent __source__, __topic__, __timestamp__ et __tag__. Séparez plusieurs champs par une virgule.

decode.table-id.fields

Spécifie les champs dont les valeurs sont utilisées pour générer un ID de table lors de l'analyse des données de journal depuis Log Service (SLS).

String

Non

Aucune

Plusieurs champs sont séparés par une virgule anglaise ,. Par exemple, si l'enregistrement de journal SLS en amont est {"col0":"a", "col1":"b", "col2":"c"}, les résultats pour différentes configurations de paramètres sont les suivants :

Configuration

ID de table

Aucune

Tous les messages sont Project.Logstore

col0

a

col0,col1

a.b

col0,col1,col2

a.b.c

Remarque

Ce paramètre est pris en charge dans les versions 11.6 et ultérieures de Realtime Compute for Apache Flink.

fixed-types

Spécifie les types de données pour des champs spécifiques lors de l'analyse des données de journal depuis Log Service (SLS).

String

Non

Aucune

Lors de l'analyse des données, spécifiez les types pour des champs spécifiques. Utilisez une virgule , pour séparer plusieurs définitions de champ. Par exemple, id BIGINT, name VARCHAR(10) spécifie le type du champ id comme BIGINT et le type du champ name comme VARCHAR(10).

Remarque

Ce paramètre est pris en charge dans les versions 11.6 et ultérieures de Realtime Compute for Apache Flink.

timestamp-format.standard

Le format des champs d'horodatage dans les données de journal de Log Service (SLS).

String

Non

SQL

Valeurs valides :

  • SQL : Analyse les horodatages d'entrée au format yyyy-MM-dd HH:mm:ss.s{precision} (par exemple, 2020-12-30 12:13:14.123) et les produit dans le même format.

  • ISO-8601 : Analyse les horodatages d'entrée au format yyyy-MM-ddTHH:mm:ss.s{precision} (par exemple, 2020-12-30T12:13:14.123) et les produit dans le même format.

Remarque

Ce paramètre est pris en charge dans les versions 11.6 et ultérieures de Realtime Compute for Apache Flink.

ingestion.ignore-errors

Indique s'il faut ignorer les erreurs survenant lors de l'analyse des données.

Boolean

Non

false

Remarque

Ce paramètre est pris en charge dans les versions 11.6 et ultérieures de Realtime Compute for Apache Flink.

ingestion.error-tolerance.max-count

Si ingestion.ignore-errors est activé, le job échoue lorsque le nombre cumulé d'erreurs dépasse cette valeur.

Integer

Non

-1

Ce paramètre prend effet uniquement lorsque ingestion.ignore-errors est activé. La valeur par défaut -1 signifie que le job ignore toutes les exceptions d'analyse.

Remarque

Ce paramètre est pris en charge dans les versions 11.6 et ultérieures de Realtime Compute for Apache Flink.

Réutilisation d'un catalogue existant

À partir de la version 11.5 de Realtime Compute for Apache Flink, vous pouvez référencer un catalogue SLS intégré créé sur la page Data Management dans les tâches d'ingestion de données Flink CDC. Cette approche évite de devoir spécifier manuellement les propriétés de connexion.

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

Actuellement, les tâches d'ingestion de données peuvent réutiliser automatiquement les paramètres suivants issus du catalogue SLS intégré :

  • endpoint

  • project

  • accessId

  • accessKey

Pour remplacer ces paramètres réutilisés automatiquement, définissez-les explicitement dans la configuration YAML. Les paramètres définis dans le fichier YAML sont prioritaires.

Correspondance des types de données

Si fixed-types n'est pas configuré, la correspondance des types de données suivante s'applique :

Type SLS

Type CDC

STRING

STRING

Si fixed-types est configuré, le système analyse les données en utilisant les types spécifiés.

Inférence et évolution du schéma

  • Pré-consommation des données des shards et initialisation du schéma

    Le connecteur SLS conserve le schéma du Logstore à partir duquel il lit les données. Avant de lire les données du Logstore, le connecteur pré-consomme jusqu'à maxPreFetchLogGroups groupes de journaux depuis chaque shard. Il analyse le schéma de chaque entrée de journal et les fusionne pour initialiser le schéma de la table. Un événement de création de table est ensuite généré sur la base de ce schéma initial avant le début de la consommation des données.

    Remarque

    Pour chaque shard, le connecteur tente de consommer les données à partir d'une heure avant l'heure actuelle afin d'analyser le schéma des journaux.

  • Informations sur la clé primaire

    Les journaux Log Service (SLS) ne contiennent pas d'informations sur la clé primaire. Vous pouvez ajouter manuellement une clé primaire à la table à l'aide de règles de transformation :

    transform:
      - source-table: <project>.<logstore>
        projection: *
        primary-keys: key1, key2
  • Inférence du schéma et modifications du schéma

    Une fois le schéma initialisé, si schema.inference.strategy est défini sur static, le connecteur SLS analyse chaque entrée de journal selon le schéma initial et ne génère pas d'événements de modification du schéma. Si schema.inference.strategy est défini sur continuous, le connecteur analyse chaque entrée de journal, déduit les colonnes physiques et les compare au schéma actuel. Si le schéma déduit est incohérent avec le schéma actuel, les schémas sont fusionnés selon les règles suivantes :

    • Si les colonnes physiques déduites contiennent des champs absents du schéma actuel, le connecteur ajoute ces champs au schéma et génère un événement pour ajouter des colonnes acceptant les valeurs NULL.

    • Si les colonnes physiques déduites omettent des champs présents dans le schéma actuel, le connecteur conserve ces champs, remplit leurs données par NULL et ne génère pas d'événement de suppression de colonne.

    Le connecteur SLS déduit le type de données de tous les champs de chaque entrée de journal comme étant String. Actuellement, seule l'ajout de nouvelles colonnes est pris en charge. Le connecteur ajoute les nouvelles colonnes à la fin du schéma et les définit comme acceptant les valeurs NULL.

Exemples de code

  • SQL pour les tables source et de destination

    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; 
  • Ingestion de données avec une source de données SLS

    Utilisez SLS comme source de données pour ingérer des données en temps réel dans les systèmes aval pris en charge. Par exemple, la configuration suivante définit une tâche d'ingestion de données qui écrit les données d'un logstore vers un lac de données au format Paimon dans Data Lake Formation (DLF). La tâche déduit automatiquement le schéma de la table de destination et prend en charge l'évolution du schéma lors de l'exécution.

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 DataStream

Important

Pour lire ou écrire des données avec l'API DataStream, utilisez un connecteur DataStream. Pour plus d'informations, consultez Utilisation des connecteurs DataStream.

Si vous utilisez une version de VVR antérieure à la 8.0.10, votre tâche risque de ne pas démarrer en raison de dépendances manquantes. Pour résoudre ce problème, ajoutez le fichier JAR uber correspondant en tant que dépendance supplémentaire.

Lire depuis SLS

Realtime Compute for Apache Flink fournit la classe SlsSourceFunction, une implémentation de SourceFunction, pour lire les données depuis Simple Log Service (SLS). L'exemple suivant lit les données depuis 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;
    }
}

Écrire dans SLS

Realtime Compute for Apache Flink fournit la classe SLSOutputFormat, une implémentation de OutputFormat, pour écrire des données dans SLS. L'exemple suivant écrit des données dans 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

Le connecteur SLS DataStream est disponible dans le dépôt central 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>

FAQ

Comment résoudre une erreur OOM TaskManager (java.lang.OutOfMemoryError: Java heap space) lors de la restauration d'un programme Flink ayant échoué ?