Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:AnalyticDB for MySQL V3.0

Dernière mise à jour :Aug 25, 2026

Le connecteur AnalyticDB for MySQL V3.0 permet de lire et d'écrire dans des clusters AnalyticDB for MySQL V3.0 via Flink SQL. AnalyticDB for MySQL est un service d'entrepôt de données cloud-native qui prend en charge les écritures en temps réel à haut débit, l'analytique à faible latence et les opérations complexes d'extraction, de transformation et de chargement (ETL).

Le connecteur prend en charge les types de table et fonctionnalités suivants :

Élément Description
Types de table Table source, table de dimension et table de destination.
Remarque

Les tables sources nécessitent Ververica Runtime (VVR) 8.0.4 ou une version ultérieure. Pour connaître les paramètres des tables sources, consultez la rubrique Utilisation de Flink pour s'abonner aux journaux binaires.

Modes d'exécution Mode streaming et mode batch
Format des données S.O.
Métriques S.O.
Type d'API API SQL
Mise à jour et suppression des données dans les tables de destination Prise en charge

Prérequis

Avant de commencer, vérifiez que vous disposez des éléments suivants :

Syntaxe

CREATE TEMPORARY TABLE adb_table (
  `id` INT,
  `num` BIGINT,
  PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
  'connector' = 'adb3.0',
  'url' = 'jdbc:mysql://<endpoint>:<port>/<databaseName>',
  'userName' = '<yourUsername>',
  'password' = '<yourPassword>',
  'tableName' = '<yourTablename>'
);
Important

La clé primaire définie dans l'instruction DDL Flink doit correspondre à la clé primaire de la table physique dans AnalyticDB for MySQL : mêmes champs, mêmes noms, présents dans les deux. Des clés primaires non concordantes peuvent entraîner une corruption des données.

Comportements clés

Clé primaire et mode d'écriture

Lorsqu'une clé primaire est définie dans le DDL, le connecteur fonctionne en mode upsert : les clés primaires en double déclenchent une mise à jour plutôt qu'une nouvelle insertion. Le comportement SQL exact dépend du paramètre replaceMode :

  • replace — utilise REPLACE INTO. Une clé primaire en double écrase la ligne existante dans son intégralité.

  • upsert — utilise INSERT INTO ... ON DUPLICATE KEY UPDATE. Seuls les champs spécifiés sont mis à jour ; les autres champs conservent leurs valeurs actuelles.

  • insert — utilise INSERT IGNORE INTO. Les clés primaires en double sont ignorées silencieusement ; la ligne existante est conservée.

En l'absence de clé primaire, le connecteur utilise toujours INSERT IGNORE INTO.

Le paramètre replaceMode nécessite AnalyticDB for MySQL V3.1.3.5 ou une version ultérieure et VVR 11.2 ou une version ultérieure pour les valeurs de chaîne ( replace , upsert , insert ). Les versions antérieures de VVR utilisent true (équivalent à replace ) et false (équivalent à upsert ). VVR 11.2 et les versions ultérieures restent compatibles avec true et false .

Mise en mémoire tampon des écritures

Le connecteur met les enregistrements en mémoire tampon et les vide par lots. Un vidage est déclenché lorsque l'une des conditions suivantes est remplie :

  • Le nombre d'enregistrements en mémoire tampon atteint batchSize (par défaut : 1 000) ou bufferSize (par défaut : 1 000)

  • Le temps écoulé depuis le dernier vidage atteint flushIntervalMs (par défaut : 3 000 ms)

Les paramètres batchSize et bufferSize ne prennent effet que lorsqu'une clé primaire est définie.

Mise en cache des tables de dimension

Le connecteur prend en charge trois stratégies de mise en cache pour les tables de dimension. La mise en cache réduit le nombre de recherches dans la table physique, mais nécessite davantage de mémoire.

Stratégie de cache Comportement Cas d'utilisation
ALL (par défaut) Toutes les données de la table de dimension sont chargées en mémoire avant le démarrage de la tâche. Les recherches ultérieures interrogent uniquement le cache. Les données sont rechargées après l'expiration de cacheTTLMs. La table de dimension est petite et les clés manquantes sont fréquentes
LRU Les lignes fréquemment consultées sont mises en cache. En cas d'absence du cache, le connecteur interroge la table physique et met à jour le cache. Les entrées expirent après cacheTTLMs. La table de dimension est volumineuse, mais l'accès se concentre sur un sous-ensemble de clés
None Aucune mise en cache. Chaque recherche interroge directement la table physique. Volume de recherches faible ou exigences strictes en matière d'actualité des données
Important

Avec la mise en cache ALL, le connecteur charge de manière asynchrone la table de dimension complète en mémoire. Vous devez augmenter la mémoire du nœud utilisé pour la jointure des tables — l'augmentation requise est au moins deux fois supérieure à la taille de la table distante — afin d'éviter les erreurs d'épuisement de la mémoire (OOM). Surveillez l'utilisation de la mémoire du nœud pendant l'exécution de la tâche.

Paramètres de la clause WITH

Paramètres communs

Paramètre Type Obligatoire Par défaut Description
connector String Oui — Définissez sur adb3.0
url String Oui — URL Java Database Connectivity (JDBC) de la base de données, au format jdbc:mysql://<endpoint>:<port>/<databaseName>. Obtenez le endpoint et le port depuis la section Network Information de la page de votre cluster dans la console AnalyticDB for MySQL.
userName String Oui — Nom d'utilisateur pour l'accès à la base de données
password String Oui — Mot de passe pour l'accès à la base de données
tableName String Oui — Nom de la table cible dans la base de données
maxRetryTimes Integer Non 10 Nombre maximal de tentatives en cas d'échec de lecture ou d'écriture

Paramètres de la table de destination

Paramètre Type Obligatoire Par défaut Description
batchSize Integer Non 1000 Nombre d'enregistrements écrits par lot. Ne prend effet que lorsqu'une clé primaire est définie.
bufferSize Integer Non 1000 Nombre maximal d'enregistrements mis en mémoire tampon avant le déclenchement d'un vidage. Ne prend effet que lorsqu'une clé primaire est définie.
flushIntervalMs Integer Non 3000 Temps maximal (en millisecondes) entre les vidages. Lorsque cet intervalle est écoulé, tous les enregistrements en mémoire tampon sont écrits, quelle que soit la taille du tampon.
ignoreDelete Boolean Non false Indique s'il faut ignorer les opérations de suppression. Définissez sur true pour ignorer les suppressions ; sur false pour les appliquer.
replaceMode Boolean Non true Mode d'écriture lorsqu'une clé primaire est définie. VVR 11.2+ : replace, upsert ou insert. Versions antérieures : true (identique à replace) ou false (identique à upsert). Nécessite AnalyticDB for MySQL V3.1.3.5 ou une version ultérieure. Ne prend effet que lorsqu'une clé primaire est définie dans le DDL ; sinon, INSERT IGNORE INTO est toujours utilisé.
excludeUpdateColumns String Non (vide) Liste séparée par des virgules des colonnes à exclure des mises à jour lorsque replaceMode est défini sur upsert (ou false). En cas de clé primaire en double : seules les colonnes restantes sont mises à jour ; les colonnes exclues conservent leurs valeurs existantes. En cas de clé primaire unique : toutes les colonnes sont insérées. Exemple : excludeUpdateColumns='column1,column2'. La valeur doit tenir sur une seule ligne, sans sauts de ligne.
connectionMaxActive Integer Non 40 Nombre maximal de connexions simultanées à la base de données dans le pool de threads

Paramètres de la table de dimension

Paramètre Type Obligatoire Par défaut Description
cache String Non ALL Stratégie de mise en cache : None, LRU ou ALL. Consultez la section Mise en cache des tables de dimension.
cacheSize Integer Non 100000 Nombre maximal de lignes mises en cache. Requis lorsque cache est défini sur LRU.
cacheTTLMs Integer Non Long.MAX_VALUE Durée de vie des entrées du cache en millisecondes. Pour LRU : les entrées expirent après cette période (par défaut : n'expirent jamais). Pour ALL : le cache complet est rechargé après cette période (par défaut : jamais rechargé). Non utilisé lorsque cache est défini sur None.
maxJoinRows Integer Non 1024 Nombre maximal de lignes de la table de dimension correspondant à chaque enregistrement d'entrée. Si chaque enregistrement d'entrée correspond à au plus n lignes de la table de dimension, définissez ce paramètre sur n pour optimiser les performances de jointure dans Realtime Compute for Apache Flink.

Mappages de types de données

AnalyticDB for MySQL V3.0 Realtime Compute for Apache Flink
BOOLEAN BOOLEAN
TINYINT TINYINT
SMALLINT SMALLINT
INT INT
BIGINT BIGINT
FLOAT FLOAT
DOUBLE DOUBLE
DECIMAL(p, s) ou NUMERIC(p, s) DECIMAL(p, s)
VARCHAR STRING
BINARY BYTES
DATE DATE
TIME TIME
DATETIME TIMESTAMP
TIMESTAMP TIMESTAMP
POINT STRING

Exemples

Table de destination

L'exemple suivant lit à partir d'une source datagen et écrit les données dans une table de destination AnalyticDB for MySQL.

CREATE TEMPORARY TABLE datagen_source (
  `name` VARCHAR,
  `age`  INT
) WITH (
  'connector' = 'datagen'
);

CREATE TEMPORARY TABLE adb_sink (
  `name` VARCHAR,
  `age`  INT
) WITH (
  'connector' = 'adb3.0',
  'url'       = 'jdbc:mysql://<endpoint>:<port>/<databaseName>',
  'userName'  = '<yourUsername>',
  'password'  = '<yourPassword>',
  'tableName' = '<yourTablename>'
);

INSERT INTO adb_sink
SELECT * FROM datagen_source;

Table de dimension

L'exemple suivant joint une source datagen à une table de dimension AnalyticDB for MySQL à l'aide d'une jointure temporelle. Les résultats sont écrits dans une destination blackhole.

CREATE TEMPORARY TABLE datagen_source (
  `a`       INT,
  `b`       VARCHAR,
  `c`       STRING,
  `proctime` AS PROCTIME()
) WITH (
  'connector' = 'datagen'
);

CREATE TEMPORARY TABLE adb_dim (
  `a` INT,
  `b` VARCHAR,
  `c` VARCHAR
) WITH (
  'connector' = 'adb3.0',
  'url'       = 'jdbc:mysql://<endpoint>:<port>/<databaseName>',
  'userName'  = '<yourUsername>',
  'password'  = '<yourPassword>',
  'tableName' = '<yourTablename>'
);

CREATE TEMPORARY TABLE blackhole_sink (
  `a` INT,
  `b` VARCHAR
) WITH (
  'connector' = 'blackhole'
);

INSERT INTO blackhole_sink
SELECT T.a, H.b
FROM datagen_source AS T
JOIN adb_dim FOR SYSTEM_TIME AS OF T.proctime AS H
  ON T.a = H.a;

Références