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 |
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
Join de tabela de dimensão não retorna dados |
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
Falha de conexão a partir do Flink/Blink |
||
|
Pico de conexões JDBC |
||
|
Thread dump travado em |
||
|
|
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 |
|
Tabela sink |
3 (ajustável com o parâmetro |
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
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:
Tente a operação de escrita novamente.
Se o problema persistir, verifique se a carga de CPU da instância do Hologres está no limite máximo no Cloud Monitor.
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:
Se as falhas forem esporádicas, podem ser ignoradas com segurança.
Para aumentar a resiliência, adicione o parâmetro
rpcRetries = '100'à tabela sink para aumentar o número de tentativas de escrita.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:
Verifique se a tabela de destino não é uma tabela estrangeira.
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:
Se o erro ocorrer de forma esporádica, pode ser ignorado — o job se recupera após um failover.
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:
Verifique se o AccessKey ID e o AccessKey secret estão corretos. O AccessKey secret frequentemente é digitado errado ou contém espaços extras.
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:
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.
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:
Recrie o slot com um nome válido.
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:
-
Consulte as publications órfãs:
SELECT * FROM pg_publication WHERE pubname NOT IN (SELECT pubname FROM pg_publication_tables); -
Remova as publications residuais:
DROP PUBLICATION <publication_name>; 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:
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.
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:
Planeje as conexões com cuidado. Reduza a concorrência do job ou o parâmetro
connectionSize.Ative o reuso de conexões definindo o mesmo
connectionPoolNamepara as tabelas de dimensão e sink. Consulte Connection reuse para mais detalhes.Se não for possível reduzir a concorrência ou o
connectionSize, definauseRpcMode = '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:
Tente executar o job novamente.
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.