Todos os produtos
Search
Central de documentação

Hologres:Troubleshoot Flink and Blink issues

Última atualização: Sep 18, 2026

Diagnostique e resolva problemas comuns ao usar o Hologres com Flink (totalmente gerenciado, VVR ou open source) e Blink como source, sink ou tabela de dimensão.

Referência rápida: mensagens de erro

Localize a solução para uma mensagem de erro específica.

Mensagem de erro

Categoria

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

Join de tabela de dimensão não retorna dados

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 / stall de dados no shard

Binary log errors

Exception: Binlog Convert Failed or shard data stall

Falha de conexão a partir do Flink/Blink

Connection errors

Connection failure from Flink or Blink

Pico de conexões JDBC

Connection errors

JDBC connection surge

Thread dump travado em Class.forName

Connection errors

Exception: Job stuck at JDBC driver loading

ClassNotFoundException: HologresBinlogRecordEmitter

Development errors

Exception: ClassNotFoundException in local Datastream development

Compatibilidade e pré-requisitos

Revise a matriz de compatibilidade e os conceitos principais antes de iniciar a resolução de problemas.

Matriz de compatibilidade do Flink e do Blink

Plataforma

Tabela source

Tabela sink

Tabela de dimensão

Binary logging

Hologres Catalog

Observações

Flink totalmente gerenciado

Linha + coluna

Linha + coluna

Use orientada por linha

Com suporte

Com suporte

--

Blink Dedicated

Linha + coluna

Linha + coluna

Use orientada por linha

V0.8: somente linha; V0.9+: linha + coluna. Use orientada por linha.

Sem suporte

Em processo de descontinuação. Migre para o Flink totalmente gerenciado.

Flink open source 1.10

Linha + coluna

Linha + coluna

Sem suporte

Sem suporte

Sem suporte

--

Flink open source 1.11+

Linha + coluna

Linha + coluna

Use orientada por linha

Sem suporte

Sem suporte

O conector Hologres é open source. Consulte GitHub.

Modos de escrita

Quando uma tabela sink possui chave primária, o Hologres oferece três modos de escrita para tratar duplicatas:

Modo

Comportamento ao duplicar chave primária

Mais indicado para

InsertOrIgnore

Descarta o novo registro. Mantém o existente.

Cenários em que registros duplicados podem ser descartados com segurança.

InsertOrReplace

Sobrescreve a linha inteira. Colunas ausentes no novo registro são definidas como null.

Atualizações completas de linha em que todas as colunas estão sempre presentes.

InsertOrUpdate

Atualiza somente as colunas presentes no novo registro. Colunas ausentes mantêm os valores existentes.

Atualizações parciais em que apenas um subconjunto de colunas é alterado.

Desempenho de escrita por tipo de armazenamento:

  • Tabelas orientadas por coluna: InsertOrIgnore > InsertOrReplace > InsertOrUpdate

  • Tabelas orientadas por linha: InsertOrReplace = InsertOrUpdate > InsertOrIgnore

Desempenho de point query por tipo de armazenamento:

Armazenamento orientado por linha > armazenamento híbrido linha-coluna > armazenamento orientado por coluna

Como o Flink mapeia tabelas Hologres

O Flink SQL mapeia uma tabela Flink para uma tabela física do Hologres por meio de parâmetros do conector. Tabelas estrangeiras não são suportadas.

O exemplo a seguir mapeia uma tabela source do Flink para uma tabela Hologres com binary logging ativado:

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

Solucionar problemas de escrita em tempo real com baixo desempenho

Siga estas etapas na ordem indicada.

Etapa 1: Confirme a configuração da tabela

Verifique os seguintes pontos:

  • Formato de armazenamento: a tabela sink é orientada por linha, orientada por coluna ou híbrida linha-coluna?

  • Modo de inserção: o job usa InsertOrIgnore, InsertOrUpdate ou InsertOrReplace?

  • Table Group e contagem de shards: esses parâmetros estão configurados adequadamente para a carga de trabalho?

Etapa 2: Verifique a métrica de latência de escrita

Se a latência média de escrita atingir centenas de milissegundos ou mais, o backend do Hologres provavelmente chegou a um gargalo de escrita. Analise as causas a seguir:

Causa A: InsertOrUpdate em tabela orientada por coluna. Atualizações parciais em tabelas orientadas por coluna são custosas. Com alto tráfego, isso causa elevado uso de CPU e alta latência de escrita.

  • Solução: Mude para uma tabela orientada por linha. Se a instância Hologres for V1.1 ou posterior, use também armazenamento híbrido linha-coluna.

Causa B: Uso de CPU próximo a 100% sem atualizações parciais. Esse cenário geralmente indica que a instância está processando muitas consultas ou um volume de escrita excessivo.

  • Solução: Escale horizontalmente a instância Hologres.

Causa C: Execução contínua de instruções INSERT INTO SELECT FROM. Essas instruções disparam escritas BulkLoad, que bloqueiam as escritas em tempo real.

  • Solução: Converta as escritas BulkLoad para escritas em tempo real ou agende-as fora do horário de pico.

Etapa 3: Verifique se há distorção de dados

Execute o seguinte SQL para verificar se os dados estão distribuídos uniformemente entre os shards:

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

Se as contagens variarem significativamente, modifique a chave de distribuição para distribuir os dados de forma mais uniforme.

Etapa 4: Verifique a pressão no backend

Se as etapas anteriores não revelarem problemas, mas o desempenho de escrita cair repentinamente, é provável que o cluster de backend esteja sob alta pressão. Entre em contato com Hologres technical support para investigar.

Etapa 5: Verifique o backpressure no Flink/Blink

Se as métricas do Hologres estiverem normais, o gargalo geralmente está no lado do Flink ou do Blink. Verifique se o nó sink está sofrendo backpressure. Quando o job possui um único nó, o backpressure não é visível no gráfico. Separe o nó sink dos operadores upstream e observe novamente. Para mais detalhes, entre em contato com o suporte técnico do Flink.

Solucionar problemas de correção na escrita de dados

Os dados gravados no Hologres não correspondem aos valores esperados? Isso geralmente é causado por escritas fora de ordem quando dados com a mesma chave primária são distribuídos entre diferentes tasks do Flink.

Solução: Na lógica do Flink SQL, embaralhe os dados pela chave primária da tabela Hologres antes de gravar. Isso garante que todos os registros de uma determinada chave primária sejam processados pela mesma task.

Solucionar problemas de consulta em tabelas de dimensão

Join de tabela de dimensão vs. join de dual-stream

Ao ler dados do Hologres, confirme primeiro que você está usando um join de tabela de dimensão, e não um join de dual-stream. O join de tabela de dimensão exige tanto proctime AS PROCTIME() na tabela source quanto FOR SYSTEM_TIME AS OF na cláusula de join. Se qualquer uma dessas palavras-chave estiver ausente, o Flink trata como um join de dual-stream.

Exemplo correto — join de tabela de dimensão:

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;

Alta latência em consultas de tabela de dimensão

O backpressure no nó de join (no lado do Flink ou do Blink) é a causa mais comum de degradação de throughput em cenários com tabelas de dimensão. Realize estas verificações:

1. Verifique o modo de join (síncrono vs. assíncrono).

O conector Hologres Flink suporta modos de join síncrono e assíncrono para tabelas de dimensão. O modo assíncrono apresenta desempenho significativamente superior. Confirme o modo verificando se 'async' = 'true' está definido no Flink SQL:

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. Analise o tipo de armazenamento e a latência de consulta no backend.

  • Tabelas orientadas por coluna usadas como tabelas de dimensão têm overhead elevado em cenários de alto QPS. Mude para armazenamento orientado por linha.

  • Se a tabela de dimensão já for orientada por linha, mas a latência ainda for alta, a carga geral da instância provavelmente está muito elevada. Escale horizontalmente a instância.

3. Verifique se a chave de join é a chave primária.

A partir do VVR 4.x (Flink 1.13), o conector Hologres suporta consultas por chaves não primárias em tabelas de dimensão via Holo Client, mas isso geralmente resulta em baixo desempenho e alta carga, especialmente sem otimização de schema. Defina a chave de join como chave de distribuição para habilitar o shard pruning.

4. Verifique o backpressure no Flink/Blink.

Se o lado do Hologres estiver normal, verifique se há backpressure no Flink ou no Blink. Quando o job possui um único nó, o backpressure não é visível. Separe o nó sink do nó de join e observe novamente. Entre em contato com o suporte técnico do Flink para análise adicional.

Gerenciamento de conexões

Por padrão, o conector Hologres usa JDBC. Entender o comportamento das conexões é fundamental para o planejamento de capacidade.

Modo JDBC_FIXED

O modo JDBC_FIXED não ocupa conexões e não é limitado pelo número máximo de walsenders ao consumir binary logs. Para detalhes de configuração, consulte Hologres connector.

Reutilização de conexões

A partir do VVR-8.0.5-Flink-1.17, a reutilização de conexões é habilitada por padrão com 'connectionPoolName' = 'default'. Para a maioria dos jobs, isso não causa impacto. Se um único job tiver muitas tabelas, o desempenho pode diminuir após uma atualização. Nesse caso, configure um connectionPoolName separado para as tabelas com maior volume de acesso.

Conexões padrão por tipo de tabela

Tipo de tabela

Conexões padrão (por concorrência do job Flink)

Tabela source com binary logging

0

Tabela source em lote

1

Tabela de dimensão

3 (ajustável com o parâmetro connectionSize)

Tabela sink

3 (ajustável com o parâmetro connectionSize)

Calcular o número máximo de conexões

Sem reutilização de conexões:

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

Exemplo: Um job com 1 tabela source completa e incremental, 2 tabelas de dimensão e 3 tabelas sink. Todas usam o connectionSize padrão de 3. A concorrência do job é 5.

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

Com reutilização de conexões (VVR 4.1.12 / Flink 1.13 e versões posteriores):

Tabelas de dimensão e tabelas sink com o mesmo connectionPoolName dentro da mesma concorrência compartilham um único pool de conexões. Usando o mesmo exemplo, se todas as 2 tabelas de dimensão e as 3 tabelas sink compartilharem um connectionPoolName e o connectionSize for aumentado para 5:

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

A reutilização de conexões funciona bem na maioria dos cenários. Porém, quando muitas tabelas de dimensão realizam point queries síncronas sem cache, o compartilhamento de conexões entre várias tabelas pode reduzir o desempenho das consultas. Nesse caso, configure a reutilização de conexões apenas para as tabelas sink.

Outros cenários que utilizam conexões

  • Inicialização do job: O conector estabelece temporariamente de 3 a 6 conexões para validação de metadados de tabela. Essas conexões são liberadas após o início da execução do job.

  • Hologres Catalog, CTAS e CDAS: Jobs que usam Hologres Catalog, CREATE TABLE AS SELECT (CTAS) ou CREATE DATABASE AS (CDAS) ocupam conexões adicionais. Por padrão, um job Catalog utiliza 3 conexões extras para operações DDL, como a criação de tabelas.

Diagnosticar o uso de conexões

Um grande número de tabelas ou alta concorrência pode esgotar as conexões da instância. Use os métodos a seguir para diagnosticar.

Consulte as conexões ativas em 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;

Conexões cujo application_name é ververica-connector-hologres representam conexões de leitura/escrita do Realtime Compute for Apache Flink. Para mais informações, consulte Query the pg_stat_activity view.

Identifique concorrência excessiva:

Na página Monitoring Information da instância na lista Instances do Hologres, se as conexões aumentarem no momento da inicialização e diminuírem com o tempo, muitas conexões estão ociosas e sendo encerradas. Isso significa que o job não precisa de tantas conexões. Reduza a concorrência ou o connectionSize, ou ative a reutilização de conexões.

Ajuste a concorrência do operador Hologres:

Por padrão, todos os operadores de um job Flink compartilham a mesma concorrência. Operadores com lógica complexa podem precisar de maior concorrência, mas esse valor geralmente é excessivo para tabelas sink do Hologres. Na configuração de recursos do job, selecione o modo especialista e defina uma concorrência menor para o operador de escrita do Hologres, reduzindo assim o total de conexões utilizadas.

Erros comuns

Erros de escrita

Erro: ERPC TIMEOUT ou ERPC CONNECTION CLOSED

Sintoma:

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

Causa: A escrita falhou devido à pressão excessiva no backend. CONNECTION CLOSED pode indicar uma falha no nó do backend causada por sobrecarga, resultando em erro de OOM ou core dump.

Solução:

  1. Tente a operação de escrita novamente.

  2. Se o problema persistir, verifique se a carga de CPU da instância do Hologres está no limite máximo no Cloud Monitor.

  3. Se necessário, entre em contato com Hologres technical support.

Erro: BackPresure Exceed Reject Limit

Causa: O backend do Hologres está sob pressão excessiva de escrita e a memtable não consegue descarregar os dados para o disco com rapidez suficiente.

Solução:

  1. Se as falhas forem esporádicas, podem ser ignoradas com segurança.

  2. Para aumentar a resiliência, adicione o parâmetro rpcRetries = '100' à tabela sink para aumentar o número de tentativas de escrita.

  3. Se o erro persistir, entre em contato com o suporte técnico do Hologres para verificar o status da instância do backend.

Erro: Modify record by primary key

Sintoma:

Modify record by primary key is not on this table

Causa: O job utiliza o modo de escrita por atualização (InsertOrReplace ou InsertOrUpdate), mas a tabela sink do Hologres não possui chave primária.

Solução: Adicione uma chave primária à tabela sink do Hologres.

Erro: Shard columns count mismatch

Sintoma:

shard columns count is no match

Causa: O job do Flink não grava todas as colunas da chave de distribuição. Por padrão, a chave de distribuição é a chave primária.

Solução: Inclua todas as colunas da chave de distribuição na operação de escrita.

Erro: Full row required, column missing

Sintoma:

Full row is required, but the column xxx is missing

Causa: Este erro ocorre em versões mais antigas do Hologres. Uma coluna não nulável não recebeu nenhum valor.

Solução: Atribua um valor à coluna não nulável ou configure a coluna para aceitar valores nulos.

Erros de schema e DDL

Erro: Table name version mismatch

Sintoma:

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

Causa: Uma operação ALTER TABLE alterou o schema da tabela. A escrita do Flink utiliza uma versão de schema desatualizada e as tentativas do cliente foram esgotadas.

Solução: Se o erro for esporádico, pode ser ignorado com segurança — o job se recupera após um failover. Caso persista, entre em contato com o suporte técnico do Hologres.

Erro: Failed to query table meta

Sintoma:

Failed to query table meta for table

Causa: O conector do Hologres não suporta tabelas estrangeiras. Se a tabela de destino não for uma tabela estrangeira, pode haver um problema nos metadados da instância.

Solução:

  1. Verifique se a tabela de destino não é uma tabela estrangeira.

  2. Se o problema persistir, entre em contato com o suporte técnico do Hologres.

Erro: Timestamp type mismatch

Sintoma:

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: Um campo na tabela do Flink utiliza o tipo TIMESTAMP(6) WITH LOCAL TIME ZONE. O mapeamento desse tipo para o Hologres não é suportado atualmente.

Solução: Altere o tipo do campo de TIMESTAMP(6) WITH LOCAL TIME ZONE para TIMESTAMP.

Erro: Table writer init failed após truncate ou rename

Sintoma:

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

Aplicável a: Hologres V2.1.1 até V2.1.14

Causa: Uma operação TRUNCATE ou de renomeação de tabela foi executada enquanto o job estava gravando dados. Nas versões V2.1.1 a V2.1.14 do Hologres, o aumento no tempo de cache de replay dos nós FE retarda o replay de DDL após operações DML, tornando essa exceção mais provável.

Solução:

  1. Se o erro ocorrer de forma esporádica, pode ser ignorado — o job se recupera após um failover.

  2. Para uma correção definitiva, atualize para a versão mais recente do Hologres V2.1.

Erros de permissão

Erro: Cloud authentication failed

Sintoma:

Cloud authentication failed for access id

Causa: O AccessKey ID ou o AccessKey secret está incorreto, ou a conta não foi adicionada à instância do Hologres.

Solução:

  1. Verifique se o AccessKey ID e o AccessKey secret estão corretos. O AccessKey secret frequentemente é digitado errado ou contém espaços extras.

  2. Se as credenciais parecerem corretas, teste a conexão usando o mesmo AccessKey no HoloWeb (faça login com a conta e senha). Se o teste retornar o mesmo erro, o AccessKey é inválido. Se o erro for FATAL: role "ALIYUN$xxxx" Does not exist, a conta não tem permissão de acesso à instância. Solicite ao administrador da instância que conceda as permissões necessárias.

Erro: IP whitelist rejection

Sintoma:

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

Causa: A instância do Hologres possui uma lista de permissões de IP configurada, mas o endereço IP pelo qual o Flink acessa o Hologres não está incluído nessa lista.

Solução: Adicione o endereço IP do cluster do Flink à IP whitelist do Hologres.

Erro: Permission denied for binary log consumption

Sintoma:

permission denied for database

Aplicável a: Hologres V1.3 e V2.0 com consumo de binary log no modo JDBC

Causa: No Hologres V1.3 e V2.0, o consumo de binary logs no modo JDBC exige configuração adicional de permissões.

Solução:

  1. Atualize o Hologres para V2.1 e utilize um conector VVR-8.0.5 ou posterior. Com essa combinação, apenas a permissão de leitura na tabela é necessária para consumir binary logs.

  2. Se a atualização não for viável, consulte as instruções de concessão de permissões em Limits.

Erros de leitura e tabela de dimensão

Join em tabela de dimensão não retorna dados

Causa: A tabela de dimensão do Hologres é uma tabela particionada. Tabelas particionadas não são suportadas como tabelas de dimensão.

Solução: Substitua a tabela particionada por uma tabela não particionada.

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

Sintoma:

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

Causa: A tabela de dimensão no modo RPC exige uma tabela orientada a linhas, e o campo de join deve ser a chave primária. Este erro ocorre quando uma ou ambas as condições não são atendidas.

Solução: Alterne para o modo JDBC e utilize uma tabela com armazenamento orientado a linhas ou híbrido (linha-coluna) para a tabela de dimensão.

Erro: Invalid UTF-8 byte sequence

Sintoma:

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

Causa: Durante uma consulta pontual em tabela de dimensão, a chave primária (do tipo string) contém caracteres não codificados em UTF-8, o que causa falha na execução do SQL.

Solução: Limpe os dados de origem para remover ou substituir os caracteres não UTF-8 antes que cheguem à consulta da tabela de dimensão.

Erros de binary log

Erro: DatahubClientException Queue Full

Sintoma:

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

Causa: Muitos jobs de consumo de binary log foram reiniciados simultaneamente, esgotando o pool de threads.

Solução: Reinicie os jobs de consumo de binary log em lotes, em vez de todos ao mesmo tempo.

Erro: Binary log read timeout

Sintoma:

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

Causa: Registros individuais do binary log são muito grandes. Após o agrupamento em lotes, o tamanho da requisição RPC ultrapassa o limite permitido.

Solução: Reduza a configuração de agrupamento em lotes. Esse problema é comum quando cada linha possui muitos campos ou valores de string muito longos.

Erro: TableVersionExpired durante o consumo de binary log

Sintoma:

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: Uma operação DDL na tabela de origem alterou a versão da tabela, causando falha no consumo.

Solução: Atualize o Flink para VVR 4.0.16 ou posterior, que realiza novas tentativas automaticamente nessa situação.

Exceção: Shard ID inexistente na inicialização do binary log

Causa: A contagem de shards da tabela consumida foi alterada (por exemplo, devido a uma renomeação ou recriação da tabela). O job tenta se recuperar a partir de um checkpoint que referencia o layout antigo de shards.

Solução: Reinicie o job sem estado (descarte o checkpoint). Após operações como a recriação de uma tabela, as informações de checkpoint do binary log deixam de ser válidas.

Erro: Syntax error in JDBC binary log slot

Sintoma:

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

Causa: Ao consumir uma tabela de binary log no modo JDBC, é obrigatório especificar um slot. Este erro ocorre quando o nome do slot contém caracteres não suportados. Nomes de slot aceitam apenas letras minúsculas, números e underscores.

Solução:

  1. Recrie o slot com um nome válido.

  2. Como alternativa, utilize o recurso de criação automática de slot disponível no VVR-6.0.7 e versões posteriores.

Erro: Failed to create hg_replication_progress

Sintoma:

create table hologres.hg_replication_progress failed

Causa: O consumo de binary log via JDBC requer a tabela hg_replication_progress. O conector a cria automaticamente se ela não existir, mas a criação falha quando a instância atinge o limite máximo de shards.

Solução: Limpe os bancos de dados não utilizados para liberar shards.

Exceção: Publication residual após recriação de tabela

Sintoma: Ao consumir binary logs no modo JDBC, uma das seguintes exceções é lançada:

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

Causa: Quando uma tabela é excluída e outra com o mesmo nome é recriada, a publication vinculada à tabela original não é removida automaticamente.

Solução:

  1. Consulte as publications órfãs:

       SELECT * FROM pg_publication WHERE pubname NOT IN (SELECT pubname FROM pg_publication_tables);
  2. Remova as publications residuais:

       DROP PUBLICATION <publication_name>;
  3. Reinicie o job do Flink.

Exceção: Binlog Convert Failed ou paralisação de leitura em shards

Sintoma: Ao consumir binary logs no modo JDBC, ocorre uma exceção Binlog Convert Failed ou a leitura de dados em alguns shards para em determinado ponto.

Causa: O gateway do Hologres não consegue retornar corretamente uma exceção de timeout do backend ao cliente, fazendo com que a leitura de dados trave ou ocorra uma falha de parsing.

Solução:

  1. Esse problema geralmente ocorre apenas quando o job está com backpressure. Se a leitura travar, reinicie o job e recupere a partir do checkpoint mais recente.

  2. Para resolver o problema de forma definitiva, atualize o Hologres para a versão 2.2.21 ou posterior.

Erros de conexão

Falha de conexão a partir do Flink ou Blink

Causa: Por padrão, o cluster do Flink ou Blink possui acesso lento ou nenhum acesso à rede pública.

Solução: Certifique-se de que o cluster do Flink ou Blink esteja na mesma região que a instância do Hologres e utilize o endpoint VPC para estabelecer a conexão.

Pico de conexões JDBC

Causa: O conector do Hologres no modo JDBC utiliza o seguinte número de conexões: Number of Hologres tables x job concurrency x connectionSize (default: 3).

Solução:

  1. Planeje as conexões com cuidado. Reduza a concorrência do job ou o parâmetro connectionSize.

  2. Ative o reuso de conexões definindo o mesmo connectionPoolName para as tabelas de dimensão e sink. Consulte Connection reuse para mais detalhes.

  3. Se não for possível reduzir a concorrência ou o connectionSize, defina useRpcMode = 'true' na tabela para alternar para o modo RPC, que não consome conexões JDBC.

Relacionado: Calculate maximum connections | Diagnose connection usage

Exceção: Job travado no carregamento do driver JDBC

Sintoma: O job trava durante a execução. Um thread dump mostra que o travamento ocorre no carregamento do driver JDBC, geralmente em Class.forName.

Causa: O JDK 8 executa inicialização estática ao carregar um driver JDBC. Uma condição de corrida pode ocorrer quando múltiplas threads o carregam simultaneamente.

Solução:

  1. Tente executar o job novamente.

  2. Atualize para a versão do conector VVR-6.0.7 ou posterior, que trata essa condição de corrida.

Erros de desenvolvimento

Exceção: ClassNotFoundException no desenvolvimento local com Datastream

Sintoma:

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

Causa: O JAR do conector comercial do Realtime Compute for Apache Flink não inclui algumas classes de runtime necessárias para execução local.

Solução: Ajuste as dependências do projeto para depuração e desenvolvimento local. Para mais instruções, consulte Run and debug jobs that contain connectors locally.