Todos los productos
Search
Centro de documentos

Hologres:Troubleshoot Flink and Blink issues

Última actualización: Sep 18, 2026

Diagnostique y resuelva los problemas más comunes al usar Hologres con Flink (totalmente administrado, VVR o de código abierto) y Blink como origen, destino o tabla de dimensiones.

Referencia rápida: mensajes de error

Consulte la solución para un mensaje de error específico a continuación.

Error message

Category

Link

ERPC_ERROR_TIMEOUT / ERPC CONNECTION CLOSED

Write errors

Error: ERPC TIMEOUT or ERPC CONNECTION CLOSED

BackPresure Exceed Reject Limit

Write errors

Error: BackPresure Exceed Reject Limit

Modify record by primary key is not on this table

Write errors

Error: Modify record by primary key

shard columns count is no match

Write errors

Error: Shard columns count mismatch

Full row is required, but the column xxx is missing

Write errors

Error: Full row required, column missing

table name xxx mismatches the version

Schema and DDL errors

Error: Table name version mismatch

Failed to query table meta for table

Schema and DDL errors

Error: Failed to query table meta

Column type does not match: TIMESTAMP(6) WITH LOCAL TIME ZONE

Schema and DDL errors

Error: Timestamp type mismatch

table writer init failed: Fail to fetch table meta from sm

Schema and DDL errors

Error: Table writer init failed after truncate or rename

Cloud authentication failed for access id

Permission errors

Error: Cloud authentication failed

Rejected by ip white list

Permission errors

Error: IP whitelist rejection

permission denied for database

Permission errors

Error: Permission denied for binary log consumption

La unión con la tabla de dimensiones no devuelve datos

Read and dimension table errors

Dimension table join returns no data

Hologres rpc mode dimension table does not support one to many join

Read and dimension table errors

Error: RPC mode dimension table one-to-many join

invalid byte sequence for encoding "UTF8": 0x00

Read and dimension table errors

Error: Invalid UTF-8 byte sequence

TableVersionExpired

Binary log errors

Error: TableVersionExpired during binary log consumption

Shard ID does not exist

Binary log errors

Exception: Shard ID does not exist on binary log startup

hologres.org.postgresql.util.PSQLException: ERROR: syntax error

Binary log errors

Error: Syntax error in JDBC binary log slot

create table hologres.hg_replication_progress failed

Binary log errors

Error: Failed to create hg_replication_progress

DatahubClientException: Queue Full

Binary log errors

Error: DatahubClientException Queue Full

Get binlog timeout

Binary log errors

Error: Binary log read timeout

no table is defined in publication / has no slot named

Binary log errors

Exception: Residual publication after table recreation

Binlog Convert Failed / estancamiento de datos del shard

Binary log errors

Exception: Binlog Convert Failed or shard data stall

Error de conexión desde Flink/Blink

Connection errors

Connection failure from Flink or Blink

Aumento repentino de conexiones JDBC

Connection errors

JDBC connection surge

El volcado de hilos se detiene en Class.forName

Connection errors

Exception: Job stuck at JDBC driver loading

ClassNotFoundException: HologresBinlogRecordEmitter

Development errors

Exception: ClassNotFoundException in local Datastream development

Compatibilidad y requisitos previos

Revise la matriz de compatibilidad y los conceptos clave antes de solucionar problemas.

Matriz de compatibilidad de Flink y Blink

Platform

Source table

Sink table

Dimension table

Binary logging

Hologres Catalog

Notes

Flink totalmente administrado

Filas + columnas

Filas + columnas

Use orientación por filas

Compatible

Compatible

--

Blink Dedicated

Filas + columnas

Filas + columnas

Use orientación por filas

V0.8: solo filas; V0.9+: filas + columnas. Use orientación por filas.

No compatible

En proceso de eliminación. Migre a Flink totalmente administrado.

Flink 1.10 de código abierto

Filas + columnas

Filas + columnas

No compatible

No compatible

No compatible

--

Flink 1.11+ de código abierto

Filas + columnas

Filas + columnas

Use orientación por filas

No compatible

No compatible

El conector de Hologres es de código abierto. Consulte GitHub.

Modos de escritura

Cuando una tabla de destino tiene una clave principal, Hologres ofrece tres modos de escritura para manejar duplicados:

Mode

Behavior on duplicate primary key

Best for

InsertOrIgnore

Descarta el registro nuevo y conserva el existente.

Escenarios donde los registros duplicados se pueden descartar sin riesgo.

InsertOrReplace

Sobrescribe toda la fila. Las columnas que no están en el registro nuevo se establecen en null.

Actualizaciones de filas completas donde siempre están presentes todas las columnas.

InsertOrUpdate

Actualiza únicamente las columnas del registro nuevo. Las columnas faltantes conservan sus valores anteriores.

Actualizaciones parciales donde solo cambia un subconjunto de columnas.

Rendimiento de escritura según el tipo de almacenamiento:

  • Tablas orientadas por columnas: InsertOrIgnore > InsertOrReplace > InsertOrUpdate

  • Tablas orientadas por filas: InsertOrReplace = InsertOrUpdate > InsertOrIgnore

Rendimiento de consultas puntuales según el tipo de almacenamiento:

Almacenamiento orientado por filas > almacenamiento híbrido de filas y columnas > almacenamiento orientado por columnas

Cómo Flink asigna tablas de Hologres

Flink SQL asigna una tabla de Flink a una tabla física de Hologres mediante los parámetros del conector. Las tablas externas no son compatibles.

A continuación se muestra un ejemplo que asigna una tabla de origen de Flink a una tabla de Hologres con el registro binario habilitado:

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

Solución de problemas de escrituras en tiempo real lentas

Siga estos pasos en orden.

Paso 1: Confirme la configuración de la tabla

Compruebe lo siguiente:

  • Formato de almacenamiento: ¿La tabla de destino usa orientación por filas, por columnas o almacenamiento híbrido?

  • Modo de inserción: ¿El trabajo utiliza InsertOrIgnore, InsertOrUpdate o InsertOrReplace?

  • Table Group y cantidad de shards: ¿Están configurados adecuadamente para la carga de trabajo?

Paso 2: Compruebe la métrica de latencia de escritura

Si la latencia promedio de escritura alcanza cientos de milisegundos o más, es probable que el backend de Hologres haya alcanzado un cuello de botella. Revise estas causas:

Causa A: InsertOrUpdate en una tabla orientada por columnas. Las actualizaciones parciales en este tipo de tablas consumen muchos recursos. Con tráfico alto, esto provoca un uso elevado de CPU y mayor latencia de escritura.

  • Solución: Cambie a una tabla orientada por filas. Si su instancia de Hologres es V1.1 o posterior, también puede usar almacenamiento híbrido de filas y columnas.

Causa B: Uso de CPU cercano al 100 % sin actualizaciones parciales. Por lo general, esto indica que la instancia procesa demasiadas consultas o un volumen de escritura excesivo.

  • Solución: Escale horizontalmente la instancia de Hologres.

Causa C: Instrucciones INSERT INTO SELECT FROM continuas. Estas activan escrituras BulkLoad, las cuales bloquean las escrituras en tiempo real.

  • Solución: Convierta las escrituras BulkLoad en escrituras en tiempo real o prográmelas fuera del horario pico.

Paso 3: Compruebe si existe sesgo de datos

Ejecute el siguiente SQL para comprobar si los datos se distribuyen uniformemente entre los shards:

SELECT hg_shard_id, count(1) FROM t1 GROUP BY hg_shard_id ORDER BY hg_shard_id;

Si los conteos varían significativamente, modifique la clave de distribución para repartir los datos de manera más uniforme.

Paso 4: Compruebe la presión en el backend

Si los pasos anteriores no revelan problemas pero el rendimiento de escritura cae de forma repentina, es probable que el clúster de backend esté bajo mucha presión. Contacte a Hologres technical support para investigarlo.

Paso 5: Compruebe la contrapresión en Flink o Blink

Si las métricas de Hologres parecen normales, el cuello de botella suele estar en Flink o Blink. Compruebe si el nodo de destino experimenta contrapresión. Si el trabajo tiene un solo nodo, la contrapresión no se aprecia en el gráfico. Separe el nodo de destino de los operadores anteriores y vuelva a observar. Para más detalles, contacte al soporte técnico de Flink.

Solución de problemas de exactitud en la escritura de datos

¿Los datos escritos en Hologres no coinciden con los valores esperados? Esto suele deberse a escrituras desordenadas cuando los datos con la misma clave principal se distribuyen en distintas tareas de Flink.

Solución: En la lógica de Flink SQL, redistribuya los datos por la clave principal de la tabla de Hologres antes de escribirlos. Así garantiza que todos los registros de una clave principal los procese la misma tarea.

Solución de problemas de consulta en tablas de dimensiones

Unión con tabla de dimensiones frente a unión de dos flujos

Al leer desde Hologres, confirme primero que está usando una unión con tabla de dimensiones y no una unión de dos flujos. La unión con tabla de dimensiones requiere tanto proctime AS PROCTIME() en la tabla de origen como FOR SYSTEM_TIME AS OF en la cláusula de unión. Si falta alguna de estas palabras clave, Flink lo interpreta como una unión de dos flujos.

Ejemplo correcto: unión con tabla de dimensiones:

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;

Latencia alta en consultas de tablas de dimensiones

La contrapresión en el nodo de unión (del lado de Flink o Blink) es la causa más común de degradación del rendimiento en escenarios con tablas de dimensiones. Revise los siguientes puntos:

1. Compruebe el modo de unión (síncrono frente a asíncrono).

El conector de Hologres para Flink admite modos de unión síncronos y asíncronos para tablas de dimensiones. El modo asíncrono ofrece un rendimiento notablemente superior. Compruebe el modo verificando si 'async' = 'true' está establecido en el SQL de 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. Revise el tipo de almacenamiento y la latencia de consulta en el backend.

  • Las tablas orientadas por columnas usadas como tablas de dimensiones generan una sobrecarga alta en escenarios con muchas consultas por segundo. Cambie a almacenamiento orientado por filas.

  • Si la tabla de dimensiones ya está orientada por filas pero la latencia sigue siendo alta, es probable que la carga general de la instancia sea excesiva. Escale horizontalmente la instancia.

3. Compruebe si la clave de unión es la clave principal.

A partir de VVR 4.x (Flink 1.13), el conector de Hologres admite consultas por claves que no son principales en tablas de dimensiones mediante Holo Client. Sin embargo, esto suele generar un rendimiento deficiente y una carga elevada, sobre todo sin optimizar el esquema. Establezca la clave de unión como clave de distribución para habilitar la poda de shards.

4. Verifique la contrapresión en Flink o Blink.

Si el lado de Hologres parece normal, compruebe si existe contrapresión en Flink o Blink. Cuando el trabajo tiene un solo nodo, la contrapresión no es visible. Separe el nodo de destino y el nodo de unión, y vuelva a observar. Contacte al soporte técnico de Flink para un análisis más detallado.

Gestión de conexiones

El conector de Hologres usa JDBC de forma predeterminada. Comprender el comportamiento de las conexiones es fundamental para planificar la capacidad.

Modo JDBC_FIXED

El modo JDBC_FIXED no ocupa conexiones ni está limitado por la cantidad máxima de walsenders al consumir registros binarios. Para conocer los detalles de configuración, consulte Hologres connector.

Reutilización de conexiones

A partir de VVR-8.0.5-Flink-1.17, la reutilización de conexiones se habilita de forma predeterminada con 'connectionPoolName' = 'default'. En la mayoría de los trabajos, esto no tiene impacto. Si un solo trabajo contiene muchas tablas, el rendimiento podría disminuir tras una actualización. En ese caso, configure un connectionPoolName independiente para las tablas con alta demanda.

Conexiones predeterminadas por tipo de tabla

Table type

Default connections (per Flink job concurrency)

Tabla de origen de registros binarios

0

Tabla de origen por lotes

1

Tabla de dimensiones

3 (ajustable con el parámetro connectionSize)

Tabla de destino

3 (ajustable con el parámetro connectionSize)

Cálculo de las conexiones máximas

Sin reutilización de conexiones:

Maximum connections = (batch source tables x 1 + dimension tables x connectionSize + sink tables x connectionSize) x job concurrency

Ejemplo: Un trabajo con 1 tabla de origen completa e incremental, 2 tablas de dimensiones y 3 tablas de destino. Todas usan el valor predeterminado de connectionSize igual a 3. La concurrencia del trabajo es 5.

(1 x 1 + 2 x 3 + 3 x 3) x 5 = 80 connections

Con reutilización de conexiones (VVR 4.1.12 / Flink 1.13 y posteriores):

Las tablas de dimensiones y las tablas de destino que comparten el mismo connectionPoolName dentro de una misma concurrencia utilizan un único pool de conexiones. Con el mismo ejemplo, si las 2 tablas de dimensiones y las 3 tablas de destino comparten un connectionPoolName y se aumenta connectionSize a 5:

(1 x 1 + 5) x 5 = 30 connections
Nota

La reutilización de conexiones funciona bien en la mayoría de los escenarios. Sin embargo, cuando muchas tablas de dimensiones ejecutan consultas puntuales síncronas sin caché, esta práctica puede ralentizar las consultas. En ese caso, configure la reutilización de conexiones únicamente para las tablas de destino.

Otros escenarios que consumen conexiones

  • Inicio del trabajo: El conector establece temporalmente de 3 a 6 conexiones para validar los metadatos de la tabla. Estas conexiones se liberan después de que el trabajo comienza a ejecutarse.

  • Hologres Catalog, CTAS y CDAS: Los trabajos que usan Hologres Catalog, CREATE TABLE AS SELECT (CTAS) o CREATE DATABASE AS (CDAS) ocupan conexiones adicionales. De forma predeterminada, un trabajo de Catalog utiliza 3 conexiones extra para operaciones DDL, como la creación de tablas.

Diagnóstico del uso de conexiones

Una gran cantidad de tablas o una concurrencia elevada pueden agotar las conexiones de la instancia. Utilice estos métodos para diagnosticar el problema.

Consulte las conexiones activas en 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;

Las conexiones cuyo application_name es ververica-connector-hologres representan conexiones de lectura y escritura de Realtime Compute for Apache Flink. Para obtener más información, consulte Query the pg_stat_activity view.

Identifique una concurrencia excesiva:

En la página Monitoring Information de la instancia, dentro de la lista Instances de Hologres, si las conexiones aumentan abruptamente al inicio y luego disminuyen con el tiempo, significa que muchas conexiones permanecen inactivas y se cierran. Esto indica que el trabajo no necesita tantas conexiones. Reduzca la concurrencia o el valor de connectionSize, o bien habilite la reutilización de conexiones.

Ajuste la concurrencia del operador de Hologres:

De forma predeterminada, todos los operadores de un trabajo de Flink comparten la misma concurrencia. Los operadores con lógica compleja podrían requerir una concurrencia mayor, pero este nivel suele ser excesivo para las tablas de destino de Hologres. En la configuración de recursos del trabajo, seleccione el modo experto y establezca una concurrencia menor para el operador de escritura de Hologres. Así reducirá el uso total de conexiones.

Errores comunes

Errores de escritura

Error: ERPC TIMEOUT o ERPC CONNECTION CLOSED

Síntoma:

com.alibaba.blink.store.core.rpc.RpcException: request xx UpsertRecordBatchRequest failed on final try 4, maxAttempts=4, errorCode=3, msg=ERPC_ERROR_TIMEOUT

Causa: La escritura falló debido a una presión excesiva en el backend. El mensaje CONNECTION CLOSED puede indicar que un nodo del backend se bloqueó por sobrecarga, lo que provocó un error OOM o un volcado de memoria.

Solución:

  1. Reintente la operación de escritura.

  2. Si el problema persiste, compruebe en Cloud Monitor si la carga de CPU de la instancia de Hologres alcanzó su límite.

  3. Contacte a Hologres technical support si es necesario.

Error: BackPresure Exceed Reject Limit

Causa: El backend de Hologres recibe demasiada presión de escritura y la memtable no se vacía al disco con la rapidez suficiente.

Solución:

  1. Si los fallos son ocasionales, puede ignorarlos sin riesgo.

  2. Para aumentar la tolerancia a fallos, agregue el parámetro rpcRetries = '100' a la tabla de destino y aumente los reintentos de escritura.

  3. Si este error persiste, contacte al soporte técnico de Hologres para revisar el estado de la instancia en el backend.

Error: Modify record by primary key

Síntoma:

Modify record by primary key is not on this table

Causa: El trabajo utiliza un modo de escritura de actualización (InsertOrReplace o InsertOrUpdate), pero la tabla de destino de Hologres no tiene clave principal.

Solución: Agregue una clave principal a la tabla de destino de Hologres.

Error: Inconsistencia en la cantidad de columnas de shard

Síntoma:

shard columns count is no match

Causa: El trabajo de Flink no escribe todas las columnas de la clave de distribución. De forma predeterminada, la clave de distribución es la clave principal.

Solución: Incluya todas las columnas de la clave de distribución en la operación de escritura.

Error: Se requiere la fila completa, falta una columna

Síntoma:

Full row is required, but the column xxx is missing

Causa: Este error ocurre en versiones anteriores de Hologres. Una columna que no acepta valores nulos no recibió ningún valor.

Solución: Asigne un valor a la columna que no acepta nulos o configúrela para que admita valores nulos.

Errores de esquema y DDL

Error: Inconsistencia en la versión del nombre de la tabla

Síntoma:

The requested table name xxx mismatches the version of the table xxx from server

o bien

org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
Caused by: java.net.SocketTimeoutException: Read timed out

Causa: Una operación ALTER TABLE modificó el esquema de la tabla. La escritura de Flink lleva una versión obsoleta del esquema y los reintentos del cliente se agotaron.

Solución: Si ocurre de forma ocasional, puede ignorarlo sin riesgo. El trabajo se recupera tras un failover. Si el error persiste, contacte al soporte técnico de Hologres.

Error: Failed to query table meta

Síntoma:

Failed to query table meta for table

Causa: El conector de Hologres no es compatible con tablas externas. Si la tabla de destino no es externa, podría tratarse de un problema con los metadatos de la instancia.

Solución:

  1. Compruebe que la tabla de destino no sea una tabla externa.

  2. Si el problema persiste, contacte al soporte técnico de Hologres.

Error: Incompatibilidad de tipos de marca de tiempo

Síntoma:

Caused by: java.lang.IllegalArgumentException: Column: created_time type does not match:
flink row type: TIMESTAMP(6) WITH LOCAL TIME ZONE, hologres type: timestamp

Causa: Un campo de la tabla de Flink utiliza el tipo TIMESTAMP(6) WITH LOCAL TIME ZONE. Actualmente no se admite la asignación de este tipo a Hologres.

Solución: Cambie el tipo del campo de TIMESTAMP(6) WITH LOCAL TIME ZONE a TIMESTAMP.

Error: Fallo al inicializar el escritor de la tabla tras truncar o renombrar

Síntoma:

table writer init failed: Fail to fetch table meta from sm

Aplica a: Hologres V2.1.1 hasta V2.1.14

Causa: Se ejecutó una operación TRUNCATE o se renombró la tabla mientras el trabajo escribía datos. En Hologres V2.1.1 hasta V2.1.14, el aumento del tiempo de caché de reproducción en los nodos FE ralentiza la reproducción de DDL tras operaciones DML, lo que hace más probable esta excepción.

Solución:

  1. Si ocurre de forma ocasional, puede ignorarlo. El trabajo se recupera tras un failover.

  2. Para una solución definitiva, actualice a la versión más reciente de Hologres V2.1.

Errores de permisos

Error: Fallo en la autenticación en la nube

Síntoma:

Cloud authentication failed for access id

Causa: El AccessKey ID o el AccessKey secret son incorrectos, o bien la cuenta no se agregó a la instancia de Hologres.

Solución:

  1. Compruebe que el AccessKey ID y el AccessKey secret sean correctos. Es común que el AccessKey secret se escriba mal o contenga espacios adicionales.

  2. Si las credenciales parecen correctas, pruebe la conexión con el mismo AccessKey en HoloWeb (inicie sesión con la cuenta y la contraseña). Si la prueba devuelve el mismo error, el AccessKey no es válido. Si el error es FATAL: role "ALIYUN$xxxx" Does not exist, la cuenta no tiene permiso para la instancia. Solicite al administrador de la instancia que otorgue los permisos necesarios.

Error: Rechazo por lista blanca de IP

Síntoma:

Caused by: org.postgresql.util.PSQLException: FATAL: Rejected by ip white list.
db = xxx, usr=xxx, ip=xx.xx.xx.xx

Causa: La instancia de Hologres tiene configurada una lista blanca de direcciones IP, pero la dirección desde la cual Flink accede a Hologres no está incluida en ella.

Solución: Agregue la dirección IP del clúster de Flink a la IP whitelist de Hologres.

Error: Permiso denegado para consumir registros binarios

Síntoma:

permission denied for database

Aplica a: Hologres V1.3 y V2.0 con consumo de registros binarios en modo JDBC

Causa: En Hologres V1.3 y V2.0, consumir registros binarios en modo JDBC requiere configurar permisos adicionales.

Solución:

  1. Actualice Hologres a V2.1 y use un conector VVR-8.0.5 o posterior. Con esta combinación, solo se requiere permiso de lectura en la tabla para consumir registros binarios.

  2. Si no es posible actualizar, consulte las instrucciones para otorgar permisos en Limits.

Errores de lectura y de tablas de dimensiones

La unión con la tabla de dimensiones no devuelve datos

Causa: La tabla de dimensiones de Hologres está particionada. Las tablas particionadas no son compatibles como tablas de dimensiones.

Solución: Reemplace la tabla particionada por una tabla sin particiones.

Error: Unión de uno a varios en tabla de dimensiones con modo RPC

Síntoma:

Hologres rpc mode dimension table does not support one to many join

Causa: La tabla de dimensiones en modo RPC requiere una tabla orientada por filas y el campo de unión debe ser la clave principal. Este error ocurre cuando no se cumple una o ambas condiciones.

Solución: Cambie al modo JDBC y utilice una tabla con almacenamiento orientado por filas o híbrido como tabla de dimensiones.

Error: Secuencia de bytes UTF-8 no válida

Síntoma:

ERROR,22021,"invalid byte sequence for encoding ""UTF8"": 0x00"

Causa: Durante una consulta puntual a la tabla de dimensiones, la clave principal (de tipo cadena) contiene caracteres que no están codificados en UTF-8, lo que provoca que falle la ejecución del SQL.

Solución: Limpie los datos de origen para eliminar o reemplazar los caracteres que no sean UTF-8 antes de que lleguen a la consulta de la tabla de dimensiones.

Errores de registros binarios

Error: DatahubClientException Queue Full

Síntoma:

Caused by: com.aliyun.datahub.client.exception.DatahubClientException:
[httpStatus:503, requestId:null, errorCode:null,
errorMessage:{"ErrorCode":"ServiceUnavailable","ErrorMessage":"Queue Full"}]

Causa: Muchos trabajos de consumo de registros binarios se reiniciaron al mismo tiempo y agotaron el pool de hilos.

Solución: Reinicie los trabajos de consumo de registros binarios por lotes en lugar de hacerlo todos a la vez.

Error: Tiempo de espera agotado al leer registros binarios

Síntoma:

Error occurs when reading data from datahub, msg: [httpStatus:500, requestId:xxx,
errorCode:InternalServerError, errorMessage:Get binlog timeout.]

Causa: Algunos registros binarios individuales son demasiado grandes. Tras agruparlos, el tamaño de la solicitud RPC supera el límite permitido.

Solución: Reduzca la configuración de agrupación. Esto es común cuando cada fila tiene muchos campos o valores de cadena muy largos.

Error: TableVersionExpired durante el consumo de registros binarios

Síntoma:

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

Causa: Una operación DDL en la tabla de origen cambió la versión de la tabla, lo que provocó que fallara el consumo.

Solución: Actualice Flink a VVR 4.0.16 o posterior, versión que reintenta automáticamente la operación en esta situación.

Excepción: El ID de shard no existe al iniciar el registro binario

Causa: La cantidad de shards de la tabla consumida cambió (por ejemplo, debido a que se renombró o se volvió a crear la tabla). El trabajo intenta recuperarse desde un punto de control que hace referencia a la distribución anterior de shards.

Solución: Reinicie el trabajo sin estado (descarte el punto de control). Después de operaciones como volver a crear una tabla, la información del punto de control del registro binario deja de ser válida.

Error: Error de sintaxis en el slot de registro binario JDBC

Síntoma:

hologres.org.postgresql.util.PSQLException: ERROR: syntax error

Causa: Al consumir una tabla de registros binarios en modo JDBC, se debe especificar un slot. Este error ocurre si el nombre del slot contiene caracteres no admitidos. Los nombres de slot solo aceptan letras minúsculas, números y guiones bajos.

Solución:

  1. Vuelva a crear el slot con un nombre válido.

  2. Como alternativa, utilice la función de creación automática de slots disponible en VVR-6.0.7 y versiones posteriores.

Error: Fallo al crear hg_replication_progress

Síntoma:

create table hologres.hg_replication_progress failed

Causa: El consumo de registros binarios basado en JDBC requiere la tabla hg_replication_progress. El conector la crea automáticamente si no existe, pero la creación falla cuando la instancia alcanza su límite máximo de shards.

Solución: Elimine las bases de datos que no utilice para liberar shards.

Excepción: Publication residual tras volver a crear una tabla

Síntoma: Al consumir registros binarios en modo JDBC, se lanza una de estas excepciones:

no table is defined in publication
The table xxx has no slot named xxx

Causa: Cuando se elimina una tabla y se vuelve a crear otra con el mismo nombre, la publication vinculada a la tabla original no se limpia automáticamente.

Solución:

  1. Busque publicaciones huérfanas con esta consulta:

       SELECT * FROM pg_publication WHERE pubname NOT IN (SELECT pubname FROM pg_publication_tables);
  2. Elimine las publicaciones residuales:

       DROP PUBLICATION <publication_name>;
  3. Reinicie el trabajo de Flink.

Excepción: Binlog Convert Failed o estancamiento de datos del shard

Síntoma: Al consumir registros binarios en modo JDBC, se produce una excepción Binlog Convert Failed o la lectura de datos de algunos shards se detiene en cierto punto.

Causa: La puerta de enlace de Hologres no logra devolver correctamente una excepción de tiempo de espera del backend al cliente, lo que provoca que la lectura de datos se estanque o que falle el análisis sintáctico.

Solución:

  1. Esto suele ocurrir únicamente cuando el trabajo presenta contrapresión. Si la lectura de datos se estanca, reinicie el trabajo y recupérelo desde el último punto de control.

  2. Para resolver este problema de forma permanente, actualice Hologres a la versión 2.2.21 o posterior.

Errores de conexión

Falla de conexión desde Flink o Blink

Causa: De forma predeterminada, el clúster de Flink o Blink tiene un acceso lento o nulo a la red pública.

Solución: Asegúrese de que el clúster de Flink o Blink se encuentre en la misma región que la instancia de Hologres. Utilice el endpoint de VPC para conectarse.

Aumento repentino de conexiones JDBC

Causa: El conector de Hologres en modo JDBC utiliza la siguiente cantidad de conexiones: Number of Hologres tables x job concurrency x connectionSize (default: 3).

Solución:

  1. Planifique las conexiones con cuidado. Reduzca la concurrencia del trabajo o el parámetro connectionSize.

  2. Habilite la reutilización de conexiones al establecer el mismo valor de connectionPoolName para las tablas de dimensiones y de destino. Consulte Connection reuse para obtener más detalles.

  3. Si no es posible reducir la concurrencia ni el valor de connectionSize, establezca useRpcMode = 'true' en la tabla para cambiar al modo RPC, ya que este no consume conexiones JDBC.

Relacionado: Calculate maximum connections | Diagnose connection usage

Excepción: el trabajo se detiene durante la carga del controlador JDBC

Síntoma: El trabajo se detiene durante la ejecución. Un volcado de hilos muestra que se detuvo en el punto de carga del controlador JDBC, por lo general en Class.forName.

Causa: JDK 8 ejecuta una inicialización estática al cargar un controlador JDBC. Puede ocurrir una condición de carrera cuando varios hilos lo cargan de forma simultánea.

Solución:

  1. Vuelva a ejecutar el trabajo.

  2. Actualice a la versión VVR-6.0.7 o posterior del conector, ya que esta gestiona dicha condición de carrera.

Errores de desarrollo

Excepción: ClassNotFoundException en el desarrollo local de Datastream

Síntoma:

java.lang.ClassNotFoundException:
com.alibaba.ververica.connectors.hologres.binlog.source.reader.HologresBinlogRecordEmitter

Causa: El archivo JAR del conector comercial de Realtime Compute for Apache Flink no incluye algunas clases de tiempo de ejecución necesarias para la ejecución local.

Solución: Ajuste las dependencias del proyecto para la depuración y el desarrollo locales. Consulte Run and debug jobs that contain connectors locally para ver las instrucciones.