Diagnostiquez et résolvez les problèmes courants lors de l'utilisation de Hologres avec Flink (entièrement géré, VVR ou open source) et Blink en tant que source, destination ou table de dimension.
Référence rapide : messages d'erreur
Trouvez la solution pour un message d'erreur spécifique.
|
Message d'erreur |
Catégorie |
Lien |
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
Erreur : Échec de l'initialisation du writer de table après troncature ou renommage |
|
|
|
||
|
|
||
|
|
Erreur : Autorisation refusée pour la consommation des journaux binaires |
|
|
La jointure de table de dimension ne renvoie aucune donnée |
||
|
|
Erreur : Jointure un-à-plusieurs sur table de dimension en mode RPC |
|
|
|
||
|
|
Erreur : TableVersionExpired lors de la consommation des journaux binaires |
|
|
|
Exception : Shard ID n'existe pas au démarrage du journal binaire |
|
|
|
Erreur : Erreur de syntaxe dans le slot de journal binaire JDBC |
|
|
|
||
|
|
||
|
|
Erreur : Délai d'attente dépassé lors de la lecture du journal binaire |
|
|
|
Exception : Publication résiduelle après recréation de table |
|
|
|
Exception : Échec de la conversion Binlog ou blocage des données de shard |
|
|
Échec de connexion depuis Flink/Blink |
||
|
Pic de connexions JDBC |
||
|
Blocage du thread dump sur |
||
|
|
Exception : ClassNotFoundException lors du développement local Datastream |
Compatibilité et prérequis
Consultez la matrice de compatibilité et les concepts clés avant de procéder au dépannage.
Matrice de compatibilité Flink et Blink
|
Plateforme |
Table source |
Table de destination |
Table de dimension |
Journalisation binaire |
Catalogue Hologres |
Notes |
|
Flink entièrement géré |
Ligne + colonne |
Ligne + colonne |
Utiliser l'orientation ligne |
Pris en charge |
Pris en charge |
-- |
|
Blink Dedicated |
Ligne + colonne |
Ligne + colonne |
Utiliser l'orientation ligne |
V0.8 : ligne uniquement ; V0.9+ : ligne + colonne. Utilisez l'orientation ligne. |
Non pris en charge |
En cours de mise hors service. Migrez vers Flink entièrement géré. |
|
Flink open source 1,10 |
Ligne + colonne |
Ligne + colonne |
Non pris en charge |
Non pris en charge |
Non pris en charge |
-- |
|
Flink open source 1,11+ |
Ligne + colonne |
Ligne + colonne |
Utiliser l'orientation ligne |
Non pris en charge |
Non pris en charge |
Le connecteur Hologres est open source. Consultez GitHub. |
Modes d'écriture
Lorsqu'une table de destination possède une clé primaire, Hologres propose trois modes d'écriture pour gérer les doublons :
|
Mode |
Comportement en cas de clé primaire en double |
Idéal pour |
|
InsertOrIgnore |
Ignore le nouvel enregistrement. Conserve l'enregistrement existant. |
Scénarios où les enregistrements en double peuvent être ignorés en toute sécurité. |
|
InsertOrReplace |
Écrase la ligne entière. Les colonnes absentes du nouvel enregistrement sont définies sur null. |
Mises à jour de lignes complètes où toutes les colonnes sont toujours présentes. |
|
InsertOrUpdate |
Met à jour uniquement les colonnes présentes dans le nouvel enregistrement. Les colonnes manquantes conservent leurs valeurs existantes. |
Mises à jour partielles où seul un sous-ensemble de colonnes change. |
Performances d'écriture par type de stockage :
Tables orientées colonne : InsertOrIgnore > InsertOrReplace > InsertOrUpdate
Tables orientées ligne : InsertOrReplace = InsertOrUpdate > InsertOrIgnore
Performances des requêtes ponctuelles par type de stockage :
Stockage orienté ligne > stockage hybride ligne-colonne > stockage orienté colonne
Mappage de Flink vers les tables Hologres
Flink SQL mappe une table Flink à une table physique Hologres via les paramètres du connecteur. Les tables étrangères ne sont pas prises en charge.
L'exemple suivant mappe une table source Flink à une table Hologres avec la journalisation binaire activée :
CREATE TABLE holo_source(
'hg_binlog_lsn' BIGINT HEADER,
'hg_binlog_event_type' BIGINT HEADER,
'hg_binlog_timestamp_us' BIGINT HEADER,
A INT,
B INT,
C TIMESTAMP
) WITH (
'type' = 'hologres',
'endpoint' = 'xxx.hologres.aliyuncs.com:80', -- The endpoint of the Hologres instance.
'userName' = '', -- The AccessKey ID of your Alibaba Cloud account.
'password' = '', -- The AccessKey secret of your Alibaba Cloud account.
'dbName' = 'binlog', -- The name of the database in the Hologres instance.
'tableName' = 'test', -- The name of the table in the Hologres instance.
'binlog' = 'true'
);
Dépannage des écritures en temps réel lentes
Suivez ces étapes dans l'ordre.
Étape 1 : Vérifier la configuration de la table
Vérifiez les points suivants :
Format de stockage : La table de destination est-elle orientée ligne, orientée colonne ou hybride ligne-colonne ?
Mode d'insertion : Le job utilise-t-il InsertOrIgnore, InsertOrUpdate ou InsertOrReplace ?
Table Group et nombre de shards : Ces éléments sont-ils configurés de manière appropriée pour la charge de travail ?
Étape 2 : Vérifier la métrique de latence d'écriture
Si la latence moyenne d'écriture atteint plusieurs centaines de millisecondes ou plus, le backend Hologres a probablement atteint un goulot d'étranglement en écriture. Vérifiez les causes suivantes :
Cause A : InsertOrUpdate sur une table orientée colonne. Les mises à jour partielles sur les tables orientées colonne sont coûteuses. Sous un trafic élevé, cela entraîne une utilisation élevée du CPU et une latence d'écriture importante.
Solution : Passez à une table orientée ligne. Si votre instance Hologres est en version V1.1 ou ultérieure, vous pouvez également utiliser le stockage hybride ligne-colonne.
Cause B : Utilisation du CPU proche de 100 % sans mises à jour partielles. Cela signifie généralement que l'instance gère trop de requêtes ou un volume d'écriture trop important.
Solution : Augmentez la capacité de l'instance Hologres (scale out).
Cause C : Instructions INSERT INTO SELECT FROM continues. Celles-ci déclenchent des écritures BulkLoad, qui bloquent les écritures en temps réel.
Solution : Convertissez les écritures BulkLoad en écritures en temps réel, ou planifiez-les pendant les heures creuses.
Étape 3 : Vérifier la distribution des données
Exécutez la commande SQL suivante pour vérifier si les données sont réparties uniformément entre les shards :
SELECT hg_shard_id, count(1) FROM t1 GROUP BY hg_shard_id ORDER BY hg_shard_id;
Si les comptes varient considérablement, modifiez la clé de distribution pour répartir les données plus uniformément.
Étape 4 : Vérifier la pression sur le backend
Si les étapes précédentes ne révèlent aucun problème mais que les performances d'écriture chutent soudainement, le cluster backend est probablement soumis à une forte pression. Contactez le support technique Hologres pour enquêter.
Étape 5 : Vérifier la contre-pression côté Flink/Blink
Si les métriques Hologres semblent normales, le goulot d'étranglement se situe généralement côté Flink ou Blink. Vérifiez si le nœud de destination subit une contre-pression. Si le job comporte un seul nœud, la contre-pression n'est pas visible dans le graphique. Séparez le nœud de destination des opérateurs en amont et observez à nouveau. Pour plus de détails, contactez le support technique Flink.
Dépannage des problèmes d'exactitude des écritures de données
Les données écrites dans Hologres ne correspondent pas aux valeurs attendues ? Cela est généralement causé par des écritures désordonnées lorsque des données ayant la même clé primaire sont distribuées across différentes tâches Flink.
Solution : Dans la logique SQL Flink, redistribuez (shuffle) les données selon la clé primaire de la table Hologres avant l'écriture. Cela garantit que tous les enregistrements pour une clé primaire donnée sont traités par la même tâche.
Dépannage des problèmes de requête de table de dimension
Jointure de table de dimension vs jointure de flux doubles
Lorsque vous lisez depuis Hologres, confirmez d'abord que vous utilisez une jointure de table de dimension, et non une jointure de flux doubles. Une jointure de table de dimension nécessite à la fois proctime AS PROCTIME() dans la table source et FOR SYSTEM_TIME AS OF dans la clause de jointure. Si l'un de ces mots-clés est manquant, Flink traite l'opération comme une jointure de flux doubles.
Exemple correct -- jointure de table de dimension :
CREATE TEMPORARY TABLE datagen_source (
a INT,
b BIGINT,
c STRING,
proctime AS PROCTIME()
) WITH (
'connector' = 'datagen'
);
CREATE TEMPORARY TABLE hologres_dim (
a INT,
b VARCHAR,
c VARCHAR
) WITH (
'connector' = 'hologres',
...
);
CREATE TEMPORARY TABLE blackhole_sink (
a INT,
b STRING
) WITH (
'connector' = 'blackhole'
);
INSERT INTO blackhole_sink SELECT T.a, H.b
FROM datagen_source AS T JOIN hologres_dim FOR SYSTEM_TIME AS OF T.proctime AS H ON T.a = H.a;
Latence élevée dans les requêtes de table de dimension
La contre-pression sur le nœud de jointure (côté Flink ou Blink) est la cause la plus fréquente de la dégradation du débit dans les scénarios de table de dimension. Effectuez les vérifications suivantes :
1. Vérifiez le mode de jointure (synchrone vs asynchrone).
Le connecteur Flink Hologres prend en charge les modes de jointure de table de dimension synchrones et asynchrones. Le mode asynchrone offre des performances nettement supérieures. Vérifiez le mode en contrôlant si 'async' = 'true' est défini dans le SQL Flink :
CREATE TABLE hologres_dim(
id INT,
len INT,
content VARCHAR
) WITH (
'connector' = 'hologres',
'dbname' = '<yourDbname>', -- The name of the Hologres database.
'tablename' = '<yourTablename>',-- The name of the table in Hologres.
'username' = '<yourUsername>', -- The AccessKey ID of your Alibaba Cloud account.
'password' = '<yourPassword>', -- The AccessKey secret of your Alibaba Cloud account.
'endpoint' = '<yourEndpoint>', -- The VPC endpoint of your Hologres instance.
'async' = 'true' -- Enable asynchronous mode.
);
2. Vérifiez le type de stockage et la latence des requêtes backend.
Les tables orientées colonne utilisées comme tables de dimension entraînent une surcharge importante dans les scénarios à haut QPS. Passez au stockage orienté ligne.
Si la table de dimension est déjà orientée ligne mais que la latence reste élevée, la charge globale de l'instance est probablement trop importante. Augmentez la capacité de l'instance (scale out).
3. Vérifiez si la clé de jointure est la clé primaire.
À partir de VVR 4.x (Flink 1.13), le connecteur Hologres prend en charge les requêtes sur des clés non primaires dans les tables de dimension via Holo Client, mais cela entraîne généralement de mauvaises performances et une charge élevée, surtout sans optimisation du schéma. Définissez la clé de jointure comme clé de distribution pour activer l'élimination des shards (shard pruning).
4. Vérifiez la contre-pression côté Flink/Blink.
Si le côté Hologres semble normal, vérifiez s'il existe une contre-pression côté Flink ou Blink. Si le job comporte un seul nœud, la contre-pression n'est pas visible. Séparez le nœud de destination et le nœud de jointure, puis observez à nouveau. Contactez le support technique Flink pour une analyse approfondie.
Gestion des connexions
Le connecteur Hologres utilise JDBC par défaut. Il est essentiel de comprendre le comportement des connexions pour planifier la capacité.
Mode JDBC_FIXED
Le mode JDBC_FIXED n'occupe pas de connexions et n'est pas limité par le nombre maximal de walsenders lors de la consommation des journaux binaires. Pour plus de détails sur la configuration, reportez-vous à Connecteur Hologres.
Réutilisation des connexions
À partir de VVR-8.0.5-Flink-1.17, la réutilisation des connexions est activée par défaut avec 'connectionPoolName' = 'default'. Pour la plupart des jobs, cela n'a aucun impact. Si un seul job comporte de nombreuses tables, les performances peuvent diminuer après une mise à niveau. Dans ce cas, configurez un paramètre connectionPoolName distinct pour les tables à forte sollicitation.
Connexions par défaut par type de table
|
Type de table |
Connexions par défaut (par concurrence de job Flink) |
|
Table source de journalisation binaire |
0 |
|
Table source par lot |
1 |
|
Table de dimension |
3 (ajustable avec le paramètre |
|
Table de destination (sink) |
3 (ajustable avec le paramètre |
Calcul du nombre maximal de connexions
Sans réutilisation des connexions :
Maximum connections = (batch source tables x 1 + dimension tables x connectionSize + sink tables x connectionSize) x job concurrency
Exemple : Un job avec 1 table source complète et incrémentielle, 2 tables de dimension et 3 tables de destination. Toutes utilisent la valeur par défaut de connectionSize qui est 3. La concurrence du job est de 5.
(1 x 1 + 2 x 3 + 3 x 3) x 5 = 80 connections
Avec réutilisation des connexions (VVR 4.1.12 / Flink 1.13 et versions ultérieures) :
Les tables de dimension et les tables de destination partageant le même paramètre connectionPoolName au sein d'une même concurrence partagent un pool de connexions. En reprenant l'exemple précédent, si les 2 tables de dimension et les 3 tables de destination partagent un paramètre connectionPoolName et que connectionSize est augmenté à 5 :
(1 x 1 + 5) x 5 = 30 connections
La réutilisation des connexions fonctionne bien dans la plupart des scénarios. Toutefois, lorsque de nombreuses tables de dimension utilisent des requêtes ponctuelles synchrones sans mise en cache, la réutilisation des connexions entre plusieurs tables peut ralentir les requêtes. Dans ce cas, configurez la réutilisation des connexions uniquement pour les tables de destination.
Autres scénarios utilisant des connexions
Démarrage du job : Le connecteur établit temporairement 3 à 6 connexions pour la validation des métadonnées de la table. Ces connexions sont libérées une fois le job en cours d'exécution.
Catalogue Hologres, CTAS et CDAS : Les jobs qui utilisent le catalogue Hologres, CREATE TABLE AS SELECT (CTAS) ou CREATE DATABASE AS (CDAS) occupent des connexions supplémentaires. Par défaut, un job de catalogue utilise 3 connexions supplémentaires pour les opérations DDL telles que la création de tables.
Diagnostic de l'utilisation des connexions
Un nombre élevé de tables ou une concurrence élevée peuvent épuiser les connexions de l'instance. Utilisez ces méthodes pour effectuer un diagnostic.
Interrogez les connexions actives dans pg_stat_activity :
SELECT application_name, COUNT(1) AS count
FROM pg_stat_activity
WHERE backend_type = 'client backend'
AND application_name != 'hologres'
GROUP BY application_name;
Les connexions dont le paramètre application_name est ververica-connector-hologres représentent les connexions de lecture/écriture depuis Realtime Compute for Apache Flink. Pour plus d'informations, consultez Interrogation de la vue pg_stat_activity.
Identification d'une concurrence excessive :
Sur la page Informations de surveillance de l'instance dans la liste Instances de Hologres, si les connexions augmentent brusquement au démarrage puis diminuent avec le temps, de nombreuses connexions sont inactives et se ferment. Cela signifie que le job n'a pas besoin d'autant de connexions. Réduisez la concurrence ou le paramètre connectionSize, ou activez la réutilisation des connexions.
Ajustement approprié de la concurrence de l'opérateur Hologres :
Par défaut, tous les opérateurs d'un job Flink partagent la même concurrence. Les opérateurs avec une logique complexe peuvent nécessiter une concurrence plus élevée, mais cette concurrence est souvent excessive pour les tables de destination Hologres. Dans la configuration des ressources du job, sélectionnez le mode expert et définissez une concurrence plus faible pour l'opérateur d'écriture Hologres afin de réduire l'utilisation totale des connexions.
Erreurs courantes
Erreurs d'écriture
Erreur : ERPC TIMEOUT ou ERPC CONNECTION CLOSED
Symptôme :
com.alibaba.blink.store.core.rpc.RpcException: request xx UpsertRecordBatchRequest failed on final try 4, maxAttempts=4, errorCode=3, msg=ERPC_ERROR_TIMEOUT
Cause : L'écriture a échoué en raison d'une pression excessive sur le backend. CONNECTION CLOSED peut indiquer un crash d'un nœud backend dû à une charge excessive, provoquant une erreur OOM ou un vidage du noyau (core dump).
Solution :
Réessayez l'opération d'écriture.
Si le problème persiste, vérifiez si la charge CPU de l'instance Hologres est saturée dans Cloud Monitor.
Contactez le support technique Hologres si nécessaire.
Erreur : BackPresure Exceed Reject Limit
Cause : Le backend Hologres subit une pression d'écriture excessive et la memtable ne peut pas être vidée sur le disque assez rapidement.
Solution :
Si les échecs sont occasionnels, ils peuvent être ignorés en toute sécurité.
Pour augmenter la résilience, ajoutez le paramètre
rpcRetries = '100'à la table de destination afin d'augmenter le nombre de tentatives d'écriture.Si cette erreur persiste, contactez le support technique Hologres pour vérifier l'état de l'instance backend.
Erreur : Modify record by primary key
Symptôme :
Modify record by primary key is not on this table
Cause : Le job utilise un mode d'écriture de mise à jour (InsertOrReplace ou InsertOrUpdate), mais la table de destination Hologres ne possède pas de clé primaire.
Solution : Ajoutez une clé primaire à la table de destination Hologres.
Erreur : Shard columns count mismatch
Symptôme :
shard columns count is no match
Cause : Le job Flink n'écrit pas toutes les colonnes de la clé de distribution. Par défaut, la clé de distribution est la clé primaire.
Solution : Incluez toutes les colonnes de la clé de distribution dans l'opération d'écriture.
Erreur : Full row required, column missing
Symptôme :
Full row is required, but the column xxx is missing
Cause : Cette erreur se produit dans les anciennes versions de Hologres. Une colonne non nullable n'a pas reçu de valeur.
Solution : Attribuez une valeur à la colonne non nullable ou configurez la colonne pour qu'elle accepte les valeurs nulles.
Erreurs de schéma et DDL
Erreur : Table name version mismatch
Symptôme :
The requested table name xxx mismatches the version of the table xxx from server
ou
org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
Caused by: java.net.SocketTimeoutException: Read timed out
Cause : Une opération ALTER TABLE a modifié le schéma de la table. L'écriture Flink contient une version obsolète du schéma et les tentatives du client sont épuisées.
Solution : Si cela se produit occasionnellement, vous pouvez l'ignorer en toute sécurité. Le job récupère après un basculement. Si l'erreur persiste, contactez le support technique Hologres.
Erreur : Failed to query table meta
Symptôme :
Failed to query table meta for table
Cause : Le connecteur Hologres ne prend pas en charge les tables étrangères. Si la table cible n'est pas une table étrangère, il peut s'agir d'un problème de métadonnées de l'instance.
Solution :
Vérifiez que la table cible n'est pas une table étrangère.
Si le problème persiste, contactez le support technique Hologres.
Erreur : Timestamp type mismatch
Symptôme :
Caused by: java.lang.IllegalArgumentException: Column: created_time type does not match:
flink row type: TIMESTAMP(6) WITH LOCAL TIME ZONE, hologres type: timestamp
Cause : Un champ de la table Flink utilise le type TIMESTAMP(6) WITH LOCAL TIME ZONE . Le mappage de ce type vers Hologres n'est actuellement pas pris en charge.
Solution : Modifiez le type de champ de TIMESTAMP(6) WITH LOCAL TIME ZONE à TIMESTAMP .
Erreur : Échec de l'initialisation du writer de table après troncature ou renommage
Symptôme :
table writer init failed: Fail to fetch table meta from sm
S'applique à : Hologres V2.1.1 à V2.1.14
Cause : Une opération TRUNCATE ou un renommage de table a été effectué pendant que le job écrivait. Dans Hologres V2.1.1 à V2.1.14, l'augmentation du temps de cache de relecture des nœuds FE ralentit la relecture DDL après les opérations DML, rendant cette exception plus probable.
Solution :
Si cela se produit occasionnellement, vous pouvez l'ignorer. Le job récupère après un basculement.
Pour une correction permanente, mettez à niveau vers la dernière version Hologres V2.1.
Erreurs d'autorisation
Erreur : Cloud authentication failed
Symptôme :
Cloud authentication failed for access id
Cause : L'ID AccessKey ou la clé secrète AccessKey est incorrecte, ou le compte n'a pas été ajouté à l'instance Hologres.
Solution :
Vérifiez que l'ID AccessKey et la clé secrète AccessKey sont corrects. La clé secrète AccessKey est souvent mal saisie ou contient des espaces supplémentaires.
Si les identifiants semblent corrects, testez la connexion en utilisant le même AccessKey dans HoloWeb (connectez-vous avec le compte et le mot de passe). Si le test renvoie la même erreur, l'AccessKey n'est pas valide. Si l'erreur est
FATAL: role "ALIYUN$xxxx" Does not exist, le compte ne dispose pas des autorisations pour l'instance. Demandez à l'administrateur de l'instance d'accorder les autorisations requises.
Erreur : Rejet par la liste blanche IP
Symptôme :
Caused by: org.postgresql.util.PSQLException: FATAL: Rejected by ip white list.
db = xxx, usr=xxx, ip=xx.xx.xx.xx
Cause : Une liste blanche IP est configurée sur l'instance Hologres, mais l'adresse IP à partir de laquelle Flink accède à Hologres ne figure pas dans la liste blanche.
Solution : Ajoutez l'adresse IP du cluster Flink à la liste blanche IP de Hologres.
Erreur : Permission denied for binary log consumption
Symptôme :
permission denied for database
S'applique à : Hologres V1.3 et V2.0 avec consommation de journaux binaires en mode JDBC
Cause : Pour Hologres V1.3 et V2.0, la consommation de journaux binaires en mode JDBC nécessite une configuration d'autorisation supplémentaire.
Solution :
Mettez à niveau Hologres vers la version V2.1 et utilisez un connecteur VVR-8.0.5 ou ultérieur. Avec cette combinaison, seule l'autorisation de lecture sur la table est requise pour consommer les journaux binaires.
Si la mise à niveau n'est pas possible, reportez-vous aux instructions d'octroi d'autorisations dans Limites .
Erreurs de lecture et de table de dimension
La jointure de table de dimension ne renvoie aucune donnée
Cause : La table de dimension Hologres est une table partitionnée. Les tables partitionnées ne sont pas prises en charge en tant que tables de dimension.
Solution : Remplacez la table partitionnée par une table non partitionnée.
Erreur : RPC mode dimension table one-to-many join
Symptôme :
Hologres rpc mode dimension table does not support one to many join
Cause : La table de dimension en mode RPC nécessite une table orientée ligne et le champ de jointure doit être la clé primaire. Cette erreur se produit lorsqu'une ou les deux conditions ne sont pas remplies.
Solution : Passez en mode JDBC et utilisez une table de stockage orientée ligne ou hybride ligne-colonne pour la table de dimension.
Erreur : Invalid UTF-8 byte sequence
Symptôme :
ERROR,22021,"invalid byte sequence for encoding ""UTF8"": 0x00"
Cause : Lors d'une requête ponctuelle sur une table de dimension, la clé primaire (de type chaîne) contient des caractères non encodés en UTF-8, ce qui entraîne l'échec de l'exécution SQL.
Solution : Nettoyez les données en amont pour supprimer ou remplacer les caractères non UTF-8 avant qu'ils n'atteignent la requête de la table de dimension.
Erreurs de journal binaire
Erreur : DatahubClientException Queue Full
Symptôme :
Caused by: com.aliyun.datahub.client.exception.DatahubClientException:
[httpStatus:503, requestId:null, errorCode:null,
errorMessage:{"ErrorCode":"ServiceUnavailable","ErrorMessage":"Queue Full"}]
Cause : De nombreux jobs de consommation de journaux binaires ont redémarré simultanément, épuisant le pool de threads.
Solution : Redémarrez les jobs de consommation de journaux binaires par lots plutôt que tous en même temps.
Erreur : Délai d'expiration de lecture du journal binaire
Symptôme :
Error occurs when reading data from datahub, msg: [httpStatus:500, requestId:xxx,
errorCode:InternalServerError, errorMessage:Get binlog timeout.]
Cause : Les enregistrements individuels du journal binaire sont trop volumineux. Après le regroupement par lots, la taille de la requête RPC dépasse la limite.
Solution : Réduisez la configuration de regroupement par lots. Cela est courant lorsque chaque ligne comporte de nombreux champs ou des valeurs de chaîne longues.
Erreur : TableVersionExpired lors de la consommation du journal binaire
Symptôme :
Caused by: java.lang.RuntimeException:
shaded.hologres.com.aliyun.datahub.client.exception.DatahubClientException:
[httpStatus:400, requestId:xx, errorCode:TableVersionExpired,
errorMessage:The specified table has been modified, please refresh cursor and try again
Cause : Une opération DDL sur la table source a modifié la version de la table, entraînant l'échec de la consommation.
Solution : Mettez à niveau Flink vers VVR 4.0.16 ou une version ultérieure, qui effectue automatiquement des nouvelles tentatives dans cette situation.
Exception : L'ID de shard n'existe pas au démarrage du journal binaire
Cause : Le nombre de shards de la table consommée a changé (par exemple, en raison d'un renommage ou d'une recréation de table). Le job tente de récupérer à partir d'un point de contrôle qui fait référence à l'ancienne disposition des shards.
Solution : Redémarrez le job sans état (ignorez le point de contrôle). Après des opérations telles que la recréation d'une table, les informations de point de contrôle du journal binaire ne sont plus valides.
Erreur : Erreur de syntaxe dans le slot de journal binaire JDBC
Symptôme :
hologres.org.postgresql.util.PSQLException: ERROR: syntax error
Cause : Lors de la consommation d'une table de journal binaire en mode JDBC, un slot doit être spécifié. Cette erreur se produit si le nom du slot contient des caractères non pris en charge. Les noms de slots prennent en charge uniquement les lettres minuscules, les chiffres et les traits de soulignement.
Solution :
Recréez le slot avec un nom valide.
Vous pouvez également utiliser la fonctionnalité de création automatique de slots disponible dans VVR-6.0.7 et versions ultérieures.
Erreur : Failed to create hg_replication_progress
Symptôme :
create table hologres.hg_replication_progress failed
Cause : La consommation de journaux binaires basée sur JDBC nécessite la table hg_replication_progress . Le connecteur la crée automatiquement si elle est manquante, mais la création échoue lorsque l'instance atteint sa limite maximale de shards.
Solution : Nettoyez les bases de données inutilisées pour libérer des shards.
Exception : Publication résiduelle après recréation de table
Symptôme : Lors de la consommation de journaux binaires en mode JDBC, l'une de ces exceptions est levée :
no table is defined in publication
The table xxx has no slot named xxx
Cause : Lorsqu'une table est supprimée et qu'une table portant le même nom est recréée, la publication liée à la table d'origine n'est pas automatiquement nettoyée.
Solution :
-
Recherchez les publications orphelines :
SELECT * FROM pg_publication WHERE pubname NOT IN (SELECT pubname FROM pg_publication_tables); -
Supprimez les publications résiduelles :
DROP PUBLICATION <publication_name>; Redémarrez le job Flink.
Exception : Binlog Convert Failed ou blocage des données de shard
Symptôme : Lors de la consommation de journaux binaires en mode JDBC, une exception Binlog Convert Failed se produit, ou la lecture des données pour certains shards s'arrête à un certain point.
Cause : La passerelle Hologres ne parvient pas à renvoyer correctement une exception de délai d'expiration du backend au client, ce qui entraîne un blocage de la lecture des données ou un échec d'analyse.
Solution :
Cela se produit généralement uniquement lorsque le job subit une contre-pression. Si la lecture des données est bloquée, redémarrez le job et récupérez à partir du dernier point de contrôle.
Pour résoudre définitivement ce problème, mettez à niveau Hologres vers la version 2.2.21 ou ultérieure.
Erreurs de connexion
Échec de connexion depuis Flink ou Blink
Cause : Le cluster Flink ou Blink a un accès lent ou inexistant au réseau public par défaut.
Solution : Assurez-vous que le cluster Flink ou Blink se trouve dans la même région que l'instance Hologres et utilisez l'endpoint VPC pour vous connecter.
Pic de connexions JDBC
Cause : Le connecteur Hologres en mode JDBC utilise autant de connexions : Nombre de tables Hologres x concurrence du job x connectionSize (par défaut : 3) .
Solution :
Planifiez soigneusement les connexions. Réduisez la concurrence du job ou le paramètre
connectionSize.Activez la réutilisation des connexions en définissant le même paramètre
connectionPoolNamepour les tables de dimension et de destination. Consultez la section Réutilisation des connexions pour plus de détails.Si vous ne pouvez pas réduire la concurrence ou le paramètre
connectionSize, définissezuseRpcMode = 'true'pour la table afin de passer en mode RPC, qui ne consomme pas de connexions JDBC.
Lié : Calcul du nombre maximal de connexions | Diagnostic de l'utilisation des connexions
Exception : Job bloqué lors du chargement du pilote JDBC
Symptôme : Le job se bloque pendant l'exécution. Un vidage de thread montre qu'il est bloqué au point de chargement du pilote JDBC, généralement à Class.forName .
Cause : JDK 8 effectue une initialisation statique lors du chargement d'un pilote JDBC. Une condition de concurrence peut se produire lorsque plusieurs threads le chargent simultanément.
Solution :
Réessayez le job.
Mettez à niveau vers la version du connecteur VVR-6.0.7 ou ultérieure, qui gère cette condition de concurrence.
Erreurs de développement
Exception : ClassNotFoundException dans le développement local Datastream
Symptôme :
java.lang.ClassNotFoundException:
com.alibaba.ververica.connectors.hologres.binlog.source.reader.HologresBinlogRecordEmitter
Cause : Le JAR du connecteur commercial Realtime Compute for Apache Flink n'inclut pas certaines classes d'exécution nécessaires à l'exécution locale.
Solution : Ajustez les dépendances du projet pour le débogage et le développement locaux. Pour obtenir des instructions, consultez Exécution et débogage locaux des jobs contenant des connecteurs .