O Alibaba Cloud Realtime Compute for Apache Flink é uma plataforma empresarial de alto desempenho para processamento de big data em tempo real, desenvolvida sobre o Apache Flink. O Hologres integra-se estreitamente ao Flink. Essa integração permite gravar e consultar dados de streaming em tempo real, construindo eficientemente um data warehouse em tempo real.
Tipos de serviço
O Realtime Compute for Apache Flink não armazena dados. Ele processa informações provenientes de sistemas de armazenamento externos e oferece suporte aos seguintes tipos de armazenamento de dados:
-
Source Table
Uma source table fornece dados de entrada para um job do Flink. Ao utilizar uma tabela do Hologres como source table, a importação ocorre em modo batch, e não em streaming. O Hologres executa uma varredura completa na tabela, envia os dados para um destino downstream e finaliza o job.
-
Dimension Table
Uma dimension table é geralmente usada para consultas pontuais por chave. Por isso, ao configurar uma tabela do Hologres como dimension table, recomenda-se o uso de Row-oriented Storage. A condição JOIN deve utilizar a chave primária completa da tabela.
-
Result Table
Uma result table recebe e armazena os dados de saída das computações do Flink. Ela disponibiliza interfaces de leitura e escrita para consumo downstream.
O Realtime Compute for Apache Flink integra-se profundamente ao Hologres para oferecer os seguintes recursos avançados de nível empresarial:
-
Consumo de Binary Logs do Hologres
Este recurso permite consumir logs de alterações de tabelas do Hologres utilizando o padrão de fila de mensagens.
-
Flink Catalog
É possível importar metadados do Hologres como um catalog no Flink. Isso permite ler metadados do Hologres diretamente do console do Fully Managed Flink sem registrar tabelas manualmente. Tal capacidade aumenta a eficiência do desenvolvimento e garante a precisão do schema.
-
Schema Evolution
O Fully Managed Flink suporta evolução de schema. Ao ler dados JSON, o Flink analisa automaticamente os tipos de dados e cria as colunas correspondentes na tabela, possibilitando a evolução dinâmica do modelo de dados.
A tabela a seguir descreve os tipos de serviço Flink suportados pelo Hologres e seus respectivos recursos.
Tipo de serviço | Tipo de armazenamento de dados | Recursos avançados | Descrição | ||||
Source table | Result table | Dimension table | Hologres binlog | Flink catalog | Schema evolution | ||
Semi-managed Flink | Suporta Row-oriented Storage e Column-oriented Storage. Para source tables de Binary Log, recomenda-se o uso de Row-oriented Storage ou armazenamento híbrido linha-coluna. | Suporta Row-oriented Storage e Column-oriented Storage. | Recomenda-se o uso de Row-oriented Storage ou armazenamento híbrido linha-coluna. | Suportado | Suportado | Suportado | Utiliza a plataforma de desenvolvimento EMR Studio. |
Blink em modo exclusivo (descontinuado) | Suporta Row-oriented Storage e Column-oriented Storage. Para source tables de Binary Log, recomenda-se o uso de Row-oriented Storage ou armazenamento híbrido linha-coluna. | Suporta Row-oriented Storage e Column-oriented Storage. | Recomenda-se o uso de Row-oriented Storage ou armazenamento híbrido linha-coluna. | O Hologres V0.8 suporta apenas Row-oriented Storage. O Hologres V0.9 e versões posteriores suportam tanto Row-oriented quanto Column-oriented Storage. Recomenda-se o uso de Row-oriented Storage. | Não suportado | Não suportado | Utiliza a plataforma de desenvolvimento Bayes. Recomenda-se o uso do Fully Managed Flink. |
Apache Flink V1.10 | Não suportado | Suporta Row-oriented Storage e Column-oriented Storage. | Não suportado | Não suportado | Não suportado | Não suportado | - |
Apache Flink V1.11 e posterior | Não suportado | Suporta Row-oriented Storage e Column-oriented Storage. | Recomenda-se o uso de Row-oriented Storage. | Não suportado | Não suportado | Não suportado | O código do conector do Hologres é open source desde o Apache Flink V1.11. Para mais detalhes, consulte alibabacloud-hologres-connectors. |
Apache Flink V1.13 e posterior | Suportado | Suporta Row-oriented Storage e Column-oriented Storage. | Recomenda-se o uso de Row-oriented Storage. | Não suportado | Não suportado | Não suportado | O código do conector do Hologres é open source desde o Apache Flink V1.11. Para mais detalhes, consulte alibabacloud-hologres-connectors. |
Notas de versão do conector Hologres
Versão do Flink | Versão do VVR | Versão do Hologres | Informações de atualização | Referências |
1.20 | 11,6 | 3.2.x 4.0.x 4.1.x | Source table:
Catalog:
Geral:
| |
1.20 | 11,5 | 3.2.x 4.0.x 4.1.x | Source table:
Dimension table:
Geral:
Correções de bugs:
| |
1.20 | 11,4 | 3.2.x 4.0.x 4.1.x | Sink table:
Dimension table:
Correções de bugs:
| |
1.20 | 11,3 | 3.1.x 3.2.x 4.0.x | Source table:
Sink table:
Geral:
Correções de bugs:
| |
1.20 | 11,2 | 3.1.x 3.2.x 4.0.x | Sink table:
Geral:
Correções de bugs:
| |
1.20 | 11,1 | 3.1.x 3.2.x | Source table:
Sink table:
Dimension table:
Geral:
| |
1.20 | 11.0 | 3.1.x 3.2.x | Geral:
Source table:
| |
1.17 | 8.0.11 | 2.1.x 2.2.x 3.0.x | Source table:
Sink table:
Geral:
Correções de bugs:
| |
1.17 | 8.0.9~8.0.10 | 2.1.x 2.2.x 3.0.x |
| |
1.17 | 8.0.8 | 2.1.x 2.2.x | Sink table:
| |
1.17 | 8.0.7 | 2.1.x | Dimension table:
Geral:
| |
1.17 | 8.0.6 | 2.1.x | Source table:
Geral:
| |
1.17 | 8.0.5 | 2.0.x 2.1.x | Source table:
Sink table:
Geral:
| |
1.17 | 8.0.4 | 2.0.x 2.1.x | Source table:
Geral:
| |
1.17 | 8.0.3 | 2.0.x 2.1.x | Geral:
| |
1,15 | 6.0.7 |
|
| |
1,15 | 6.0.6 | 1.3.x | Source table:
| |
1,15 | 6.0.5 | 1.3.x |
| |
1,15 | 6.0.3~6.0.4 | 1.3.x | Source table:
Sink table: Adicionado suporte para escrita de dados no modo Fixed Copy. O Fixed Copy é um novo recurso do Hologres V1.3. Comparado ao modo JDBC, o modo Fixed Copy oferece maior throughput e menor latência de dados via streaming, além de reduzir o consumo de memória do cliente ao eliminar o batching. Hologres Catalog:
Parâmetro sdkMode: Diferentes modos estão disponíveis para diferentes tipos de tabelas no Hologres. O parâmetro sdkMode agora consolida a seleção de modo. | |
1.13 | 4.0.18 | 1.1 e posterior | Corrigido problema onde o relatório de métricas para uma sink table degradava o desempenho de escrita. | |
1.13 e 1,15 | 4.0.15 e 6.0.2 | 1.1 e posterior | Source table:
Dimension table: Adicionado suporte para configurar timeout de requisição assíncrona ( Sink table:
| |
1.13 | 4.0.13 | 1.1 e posterior |
| |
1.13 | 4.0.11 | 0.10 e posterior | Adicionado suporte para CTAS e CDAS. | |
1.13 | 4.0.8 | 0.10 e posterior | Adicionado suporte para Hologres Catalog em sink tables, source tables e dimension tables. | |
1.13 | 3.0.0 | 0.9 e posterior | Adicionado suporte para consumo de dados em tempo real do Hologres. |
Problemas conhecidos e correções
-
Notas sobre problemas e correções
As versões afetadas para cada problema são claramente especificadas. Versões fora do intervalo listado não são afetadas.
Se a versão afetada estiver marcada como "N/A", o problema pode ser um defeito no mecanismo do Hologres, e não no conector.
-
Níveis de severidade
P0 (Crítico): Recomenda-se atualização imediata. A ocorrência deste problema pode afetar operações de produção, como a correção de consultas ou taxas de sucesso de escrita.
P1 (Alto): Recomenda-se atualização para prevenir problemas potenciais.
P2 (Médio): Atualização opcional. Estes problemas ocorrem intermitentemente e podem ser resolvidos com uma solução alternativa ou reinicialização do job.
Severidade | Descrição | Versão afetada | Versão corrigida | Solução |
P0 | Ao gravar em um subconjunto de colunas em uma result table, se campos não escritos tiverem um valor padrão relacionado a tempo (como current_timestamp ou now()), o valor preenchido pode estar incorreto. Isso ocorre porque o modo FixedFE não lida corretamente com valores padrão relacionados a tempo. | 11.0-11,5 | N/A | Use a função now() do lado do Flink para passar o valor ao campo correspondente na result table. Alternativamente, defina o parâmetro |
P0 | Durante o consumo de Binlog, se uma coluna física e uma coluna de metadados compartilharem o mesmo nome, como | 8.0.11, 11.0-11,4 | 11,5 | Atualize para a versão 11,5 ou posterior e defina |
P1 | Durante o consumo de Binlog, o column pruning pode ler dados nas colunas erradas. Isso ocorre porque o holo-client pode recuperar colunas inesperadas ao lidar com column pruning. | 11,3-11,5 | Hotfixes foram lançados para todas as versões afetadas (11,3-11,5). | Um hotfix resolve este problema, tornando improvável sua ocorrência. Para jobs DataStream, use a versão mais recente do conector. |
P2 | O scanner de uma dimension table um-para-muitos não fecha corretamente ao parar o job. Isso pode levar a vazamentos de recursos ou timeouts de job durante o encerramento. Um problema na lógica interna de encerramento do scanner do holo-client causa esta questão. | Versões anteriores a 11,3 | 11,4 | Atualize para a versão 11,4 ou posterior. |
P1 | Ao usar o recurso check-and-put, o processamento de um registro de exclusão lança uma NullPointerException (NPE) e causa falha no job. | 8.0.11-11,4 | 11,5 | Atualize para a versão 11,5 ou posterior. Alternativamente, evite usar check-and-put em streams que possuem operações de exclusão. |
P2 | O conector falha ao retomar de um checkpoint se uma tabela foi excluída e recriada enquanto o job estava em execução. | 11.0-11,2 | 11,3 | Em ambiente de teste, atualize para a versão 11,3 ou posterior para evitar este problema. Nota: Excluir uma tabela durante o consumo de Binlog afeta a correção dos dados. Portanto, evite reconstruir tabelas durante o consumo de Binlog em ambiente de produção. |
P1 | A leitura de dados RoaringBitmap através de Binlog JDBC falha e lança uma exceção de análise. | 11.0-11,2 | 11,3 | Atualize para a versão 11,3 ou posterior. |
P1 | Ao consumir de uma tabela fisicamente particionada, se um shard não tiver dados, o conector inicializa incorretamente o Log Sequence Number (LSN) do estado como 0. Isso causa perda de dados quando o job retoma deste estado. | Versões anteriores a 8.0.10, 11.0-11,2 | 8.0.11, 11,3 | Atualize para a versão 8.0.11, ou 11,3 ou posterior. |
P1 | Escrever um array TEXT que contém um elemento nulo lança uma NPE e causa falha na operação de escrita. | 11.0-11,1 | 11,2 | Atualize para a versão 11,2 ou posterior. Alternativamente, garanta que o array TEXT upstream não contenha elementos nulos. |
P1 | Um conflito entre o sufixo de criação de partição e o particionamento dinâmico causa falha na criação da partição. | 11.0-11,2 | 11,3 | Atualize para a versão 11,3 ou posterior. |
P2 | Exceções não relacionadas a dirty data podem acionar a política de dirty data, fazendo com que exceções válidas sejam tratadas incorretamente (ex.: descartadas silenciosamente). | 11.0-11,1 | 11,2 | Atualize para a versão 11,2 ou posterior. |
P1 | Para uma source table de Integração Completa e Incremental, o Binlog JDBC começa a consumir em LSN+1. Se o LSN atual já estiver em um checkpoint, retomar a partir dele pode pular um registro. | 8.0.10 e anterior | 8.0.11 | Atualize para a versão 8.0.11. |
P2 | Em um cenário CTAS, se uma exclusão de coluna e uma alteração de tipo ocorrerem na mesma operação, um erro de normalização de tipo causa falha na alteração do schema. | 8.0.10 e anterior | 8.0.11 | Atualize para a versão 8.0.11. Alternativamente, evite excluir uma coluna e alterar um tipo na mesma operação. |
P2 | Ao usar uma dimension table de catalog, a validação de fábrica dos parâmetros de Binlog causa uma exceção falso-positiva. | 8.0.10 e anterior | 8.0.11 | Atualize para a versão 8.0.11. |
P2 | Em cenários com múltiplas tabelas, um número excessivo de requisições de polling JDBC causa timeout no SQL Gateway. | 11.0-11,5 | 11,6 | Atualize para a versão 11,6. Alternativamente, reduza o número de tabelas do Hologres em um único job. |
P2 | Quando o modo FixedFE é selecionado, se uma tabela contiver um tipo de dados não suportado pelo FixedFE, a conexão não faz downgrade automático para uma conexão FE, causando exceções de escrita ou consulta. | 11.0-11,2 | 11,3 | Atualize para a versão 11,3 ou posterior. Alternativamente, especifique manualmente o modo de conexão FE. |
P1 | Ao consumir um Binlog no modo JDBC, pode ocorrer uma exceção "Binlog Convert Failed", ou a leitura de dados de alguns shards pode travar. Isso acontece porque o gateway da instância do Hologres apresenta um problema ao retornar uma exceção de timeout de backend para o cliente, fazendo com que a operação de leitura trave ou falhe com erro de análise. | N/A | N/A | Este problema é mais provável de ocorrer quando o backpressure do job é alto. Se a leitura de dados travar, reinicie o job e retome do checkpoint mais recente. Para resolver completamente este problema, atualize sua instância do Hologres para a versão 2.2.21 ou posterior. |
P2 | Jobs demoram para implantar ou atingem timeout. Uma análise de thread dump mostra que o processo está travado em GetTableSchema. | N/A | N/A | Este problema pode ter várias causas. Siga estes passos para solucioná-lo:
|
P0 | Ao gravar dados TEXT, JSON ou JSONB no Hologres no modo FixedFE (que corresponde ao modo jdbc_fixed do conector), um caractere inválido na fonte de dados pode lançar uma exceção inesperada. Isso pode fazer com que o nó FE conectado reinicie, interrompendo a conexão. | N/A | N/A | Se não for possível garantir a validade da string upstream, grave dados no modo JDBC e ative uma configuração para a result table. O parâmetro Alternativamente, atualize sua instância do Hologres para a versão 3,0 ou posterior para continuar usando o modo jdbc_fixed. |
P1 | Ao realizar um join um-para-muitos em uma dimension table JDBC, tarefas do Flink podem apresentar alto uso de memória ou erro Out Of Memory (OOM). | N/A | N/A | No Hologres V1.3, se você usar Para resolver completamente este problema, atualize sua instância do Hologres para V2.0 ou posterior. |
P1 | Um job de Binlog lança a exceção | 8.0.4 | 8.0.9 | A partir da versão 8.0.9, a verificação do ID da tabela não é mais imposta. Em vez disso, um aviso é registrado, permitindo que o job retome do estado mais recente. No entanto, evite reconstruir uma tabela enquanto um job de Binlog está em execução, pois esta operação causa a perda de todos os dados anteriores do Binlog. |
P2 | Ocorre backpressure enquanto um job está em execução. Um thread dump mostra que o pool de execução está travado no método close() ou start(). Isso pode acontecer se múltiplos clientes compartilharem o mesmo pool de conexões, levando a um deadlock que impede o fechamento adequado do pool. | 8.0.5 | 8.0.9 | Atualize a versão do conector. |
P2 | Se executar um job para consumo completo e incremental após realizar uma operação | 8.0.6 e anterior | 8.0.7 | Atualize a versão do conector ou especifique um horário de início para o consumo incremental. |
P1 | Se uma dimension table contiver um grande número de campos, a implantação do job atinge timeout. | 8.0.6 | 8.0.7 | Atualize a versão do conector. |
P0 | Quando o parâmetro Nota Este problema não afeta source tables de Integração Completa e Incremental ou source tables de Binlog. | 8.0.5 e anterior | 8.0.6 | Atualize a versão do conector. |
P0 | Ao gravar dados JSON ou JSONB no Hologres no modo FixedFE (que corresponde ao modo | 8.0.5 e anterior | Nenhuma | Se a validade das strings JSON ou JSONB upstream não puder ser garantida, use o modo JDBC para gravar os dados. |
P1 | Ao realizar um join um-para-muitos em uma dimension table JDBC, exceções internas como falhas de conexão não são lançadas adequadamente. Isso pode se manifestar como backpressure no nó de join assíncrono, causando a parada do fluxo de dados. Este problema ocorre raramente. | 6.0.7 e anterior | 8.0.3 | Atualize a versão do conector. Você também pode reiniciar o job como solução temporária. |
P1 | Ocorre vazamento de memória ao consumir dados de Binlog no modo JDBC. Isso pode se manifestar como uma alta taxa de consumo no início do job, que então diminui continuamente. | 6.0.7 e anterior | 6.0.7 | Atualize a versão do conector. Para jobs DataStream, é necessário usar a dependência da versão 6.0.7-1. |
P0 | Ao gravar no modo JDBC, exceções capturadas durante um flush agendado (controlado pelo parâmetro jdbcWriteFlushInterval) não são lançadas até que o próximo registro de dados seja processado. Se o tráfego de escrita for baixo, um checkpoint pode ser criado com sucesso enquanto uma exceção foi capturada, mas ainda não lançada. Se ocorrer uma falha subsequente, o job retomará deste checkpoint inválido, o que pode levar à perda de dados. | 6.0.6 e anterior | 6.0.7 | Este problema é mais provável de ocorrer com baixo tráfego. Atualize a versão do conector ou defina o jdbcWriteFlushInterval para um intervalo maior que o do checkpoint. |
P2 | Ao consumir dados de Binlog no modo JDBC sem definir um nome de slot, o sistema cria um automaticamente. Se o nome da tabela ou schema contiver caracteres especiais, o nome do slot gerado automaticamente é inválido e causa erro de sintaxe. | 6.0.6 | 6.0.7 | Atualize a versão do conector. Para jobs DataStream, é necessário usar a dependência da versão 6.0.7-1. |
P1 | Se diferentes instâncias ou bancos de dados do Hologres no mesmo job usarem o mesmo | 6.0.6 e anterior | 6.0.7 | Use um |
P1 | Uma NPE é lançada se uma dimension table contiver um campo string com valor | 6.0.6 | 6.0.7 | Atualize a versão do conector. |
P0 | O pushdown de filtros está ativado por padrão para source tables do Hologres. No entanto, se um job também usar uma dimension table do Hologres, e o DML de escrita contiver um filtro em um campo não primário da dimension table, o filtro também é aplicado incorretamente à dimension table. Isso pode causar resultados incorretos no join da dimension table. | 6.0.3-6.0.5 | 6.0.6 | Atualize a versão do conector. |
P0 | Se múltiplas result tables tiverem configurações diferentes de | 6.0.2 e anterior | 6.0.3 | Defina o |
P1 | Uma NPE é lançada se o campo | 6.0.2 | 6.0.3 | Não use este campo ou atualize a versão do conector. |
P1 | O relatório de métricas afeta o desempenho de escrita das result tables. Um | 4.0.15-4.0.17 | 4.0.18 | Use uma versão que não seja afetada por este problema. |
P2 | Ao ler dados do tipo STRING ou STRING ARRAY de uma source table batch, a análise falha se os dados contiverem caracteres especiais. | 4.0.14 e anterior | 4.0.15 | Remova os dirty data da source table ou atualize a versão do conector. |
P2 | Se declarar campos específicos de Binlog, como | 4.0.13 | 4.0.14 | Evite usar o recurso de Integração Completa e Incremental ou atualize a versão do conector. |