Todos os produtos
Search
Central de documentação

Hologres:Consumir dados binlog do Hologres com o Flink

Última atualização: Sep 18, 2026

Este tópico descreve como usar o Realtime Compute for Apache Flink para consumir dados binlog do Hologres em tempo real.

Notas de uso

Antes de consumir dados binlog do Hologres, observe o seguinte:

  • O consumo de dados binlog requer o Hologres V0.9 ou posterior. A configuração de uma lista de permissões de engine requer o Hologres V1.3.21 ou posterior. Ao ativar uma lista de permissões em uma instância com versão anterior ao Hologres V1.3.21, o consumo de binlog falhará. Caso sua versão seja anterior à exigida, entre em contato com Obtain online support for Hologres para obter assistência.

  • O Hologres oferece suporte ao recurso binlog no nível de tabela para tabelas orientadas a linhas e tabelas orientadas a colunas. A partir do Hologres V1.1, tabelas de armazenamento híbrido linha-coluna também passaram a ser suportadas. Após ativar o recurso binlog, tabelas orientadas a colunas têm, teoricamente, overhead maior do que tabelas orientadas a linhas. Portanto, em cenários com atualizações frequentes de dados, recomendamos ativar o recurso binlog para tabelas orientadas a linhas.

  • Para mais informações sobre o suporte a binlog e sobre como ativar e configure esse recurso, consulte Subscribe to Hologres binlogs.

  • Somente o Realtime Compute for Apache Flink fornecido pela Alibaba Cloud oferece suporte ao consumo de dados binlog do Hologres. No modo HoloHub, o consumo de dados binlog do Hologres com o Flink oferece suporte apenas a tipos de dados simples. A partir do Flink VVR 6.0.3, é possível consumir dados binlog do Hologres no modo JDBC. Em comparação com o modo HoloHub, o modo JDBC oferece suporte a mais tipos de dados. Para mais informações, consulte Data type mappings between Blink/Flink and Hologres. Esse modo exige permissões adicionais. Para detalhes, consulte Permissions.

  • Não é possível consumir dados binlog de uma tabela particionada pai.

  • O Hologres V2.0 oferece suporte limitado ao modo HoloHub. A partir do V2.1, o modo HoloHub foi descontinuado e totalmente substituído pelo modo JDBC. Antes de atualizar sua instância do Hologres, consulte Switch from HoloHub mode to JDBC mode para verificar os jobs do Flink que utilizam o modo HoloHub, atualize-os para o Flink VVR adequado e, em seguida, atualize sua instância do Hologres.

Permissões

  • Ao contrário do modo HoloHub, o modo JDBC oferece suporte a contas personalizadas do Hologres quando você usa o Realtime Compute for Apache Flink para consumir dados binlog do Hologres.

  • Para consumir dados binlog do Hologres no modo HoloHub, seu job do Flink requer permissões de leitura e escrita na tabela.

  • Para consumir dados binlog do Hologres no modo JDBC, os seguintes pré-requisitos se aplicam. Para mais informações, consulte Consume binlog data by using JDBC.

    1. A extensão hg_binlog deve estar criada. Essa extensão é criada por padrão no Hologres V2.0 e posterior.

    2. O usuário deve ser superusuário da instância, ou ter permissões de owner na tabela de destino e permissões de função de replicação na instância.

Consumir dados binlog com o Flink

O Realtime Compute for Apache Flink com VVR 2.4 ou posterior oferece suporte ao consumo em tempo real de dados binlog por meio do Hologres Connector. As seções a seguir descrevem como usar esse recurso.

DDL de tabela source no modo não-CDC

Neste modo, os dados binlog consumidos pelo Source são repassados aos nós downstream como dados regulares do Flink. Isso significa que todos os dados são tratados como dados do tipo Insert, e você pode escolha como processar dados de um tipo específico de hg_binlog_event_type conforme os requisitos do seu negócio. Após ativar o binlog para uma tabela do Hologres, utilize o seguinte DDL para uma tabela source (no modo não-CDC) no Flink para consumir o binlog em tempo real.

create table test_message_src_binlog_table(
  hg_binlog_lsn BIGINT,
  hg_binlog_event_type BIGINT,
  hg_binlog_timestamp_us BIGINT,
  id INTEGER,
  title VARCHAR,
  body VARCHAR
) with (
  'connector'='hologres',
  'dbname'='<yourDbname>',
  'tablename'='<yourTablename>',
  'username'='<yourAccessID>',
  'password'='<yourAccessSecret>',
  'endpoint'='<yourEndpoint>',
  'binlog' = 'true',
  'binlogMaxRetryTimes' = '10',
  'binlogRetryIntervalMs' = '500',
  'binlogBatchReadSize' = '100'
);
  • Os três parâmetros binlogxxx são campos de sistema do binlog. Seus nomes e tipos são fixos e não podem ser modificados.

  • Os demais campos correspondem aos campos definidos pelo usuário e devem estar todos em letras minúsculas.

DDL de tabela source no modo CDC

Neste modo, o Source consome os dados binlog e define automaticamente o tipo correto de Flink RowKind (INSERT, DELETE, UPDATE_BEFORE ou UPDATE_AFTER) para cada linha com base no hg_binlog_event_type. Isso possibilita a sincronização espelhada dos dados da tabela, semelhante ao recurso CDC do MySQL e do PostgreSQL.

Nota

As tabelas source de binlog do Hologres no modo CDC não oferecem suporte a definições de watermark no momento. Caso precise realizar agregação por janela, utilize uma abordagem sem janelamento. Para mais informações, consulte How do I implement minute-level aggregation when CDC source tables do not support window functions?.

Após ativar o recurso binlog para uma tabela do Hologres, utilize o seguinte DDL no Flink para crie uma tabela source e consumir dados binlog em tempo real no modo CDC.

create table test_message_src_binlog_table(
  id INTEGER,
  title VARCHAR,
  body VARCHAR
) with (
  'connector'='hologres',
  'dbname'='<yourDbname>',
  'tablename'='<yourTablename>',
  'username'='<yourAccessID>',
  'password'='<yourAccessSecret>',
  'endpoint'='<yourEndpoint>',
  'binlog' = 'true',
  'cdcMode' = 'true',
  'binlogMaxRetryTimes' = '10',
  'binlogRetryIntervalMs' = '500',
  'binlogBatchReadSize' = '100'
);

Tabela source para dados completos e incrementais

A partir do engine VVR 1.13-vvr-4.0.13 e do Hologres V0.10, a tabela source CDC de binlog do Hologres oferece suporte ao consumo integrado de dados completos e incrementais. Esse método primeiro lê os dados históricos completos do banco de dados e, em seguida, realiza a transição suave para a leitura de dados incrementais a partir do binlog. Para mais informações, consulte Hologres real-time data warehouse.

Tabela source de binlog no modo JDBC

A partir do Flink VVR 6.0.3, é possível consumir dados binlog do Hologres no modo JDBC. Em comparação com o modo HoloHub, o modo JDBC oferece suporte a mais tipos de dados e a contas personalizadas. Para mais informações sobre como usar o modo JDBC, consulte Hologres real-time data warehouse.

Migrar do modo HoloHub para o modo JDBC

O Hologres começou a descontinuar o modo HoloHub na V2.0. Caso precise atualizar sua instância do Hologres, migre seus jobs do modo HoloHub para o modo JDBC conforme descrito abaixo.

Upgrade to V2.1

Antes de atualizar sua instância do Hologres para V2.1, escolha uma das soluções a seguir para verificar seus jobs do Flink e sua instância do Hologres, garantindo que os jobs funcionem conforme o esperado.

  • (Solução 1) (Recomendada) Atualize sua versão do Flink VVR para 8.0.7 ou posterior. O Flink migrará automaticamente do modo HoloHub para o modo JDBC.

  • (Solução 2) Atualize seu Flink VVR para uma versão entre 6.0.7 e 8.0.5. Adicione o parâmetro 'sdkMode'='jdbc' à tabela source e reinicie o job. Conceda ao usuário um dos seguintes conjuntos de permissões. Após confirme que o job está funcionando corretamente, atualize a instância do Hologres.

    • (Opção 1) Permissões de superusuário na instância.

    • (Opção 2) Permissões de owner na tabela de destino, permissão CREATE DATABASE e permissões de função de replicação na instância.

  • (Solução 3) (Não recomendada) Atualize o Flink VVR para a versão 8.0.6. O Flink migrará automaticamente do modo HoloHub para o modo JDBC. No entanto, o VVR 8.0.6 possui um defeito conhecido que pode causar timeout na implantação do job caso uma tabela de dimensão contenha muitos campos. Para mais informações, consulte Hologres Connector Release Notes.

  • (Opcional) Se você tiver muitos jobs do Flink VVR, utilize as instruções a seguir para identificar quais jobs e tabelas precisam ser atualizados.

Upgrade to V2.0

  • (Solução 1) (Recomendada) Atualize sua versão do Flink VVR para 8.0.6 ou posterior. O Flink migrará automaticamente do modo HoloHub para o modo JDBC. No entanto, o VVR 8.0.6 possui um defeito conhecido que pode causar timeout na implantação do job caso uma tabela de dimensão contenha muitos campos. Para mais informações, consulte Hologres Connector Release Notes. Recomendamos atualizar para o VVR 8.0.7.

  • (Solução 2) Atualize sua versão do Flink VVR para 8.0.4 ou 8.0.5 e reinicie o job do Flink. Conceda ao usuário um dos seguintes conjuntos de permissões. Após confirme que o job está funcionando corretamente, atualize a instância do Hologres.

    • (Opção 1) Permissões de superusuário na instância.

    • (Opção 2) Permissões de owner na tabela de destino, permissão CREATE DATABASE e permissões de função de replicação na instância.

  • (Solução 3) Atualize sua versão do Flink VVR para uma versão entre 6.0.7 e 8.0.3. O Flink continuará usando o modo HoloHub para consumir dados binlog.

Se você tiver muitos jobs do Flink VVR que consomem dados binlog do Hologres, utilize o método a seguir para identificar os jobs e as tabelas que precisam ser atualizados.

Nota

Essa ferramenta consegue obter informações apenas para os seguintes tipos de jobs:

  • Jobs SQL que utilizam DDL para definir tabelas.

  • Jobs de Catalog que utilizam hints para especifique parâmetros.

A ferramenta não oferece suporte à obtenção de informações para jobs JAR nem para tabelas de Catalog sem parâmetros de hint.

  1. Baixe a ferramenta open-source find-incompatible-flink-jobs-1,0-SNAPSHOT-jar-with-dependencies.jar.

  2. Na linha de comando local, acesse o diretório da ferramenta open-source e execute o seguinte comando para visualize todos os jobs e tabelas que precisam ser atualizados.

    Nota

    Para execute o comando a seguir, é necessário ter um ambiente Java instalado, com JDK 8 ou posterior.

    java -cp find-incompatible-flink-jobs-1.0-SNAPSHOT-jar-with-dependencies.jar com.alibaba.hologres.FindIncompatibleFlinkJobs <region> <url> <AccessKeyID> <AccessKeySecret> <binlog/rpc>
    # Example
    java -cp find-incompatible-flink-jobs-1.0-SNAPSHOT-jar-with-dependencies.jar com.alibaba.hologres.FindIncompatibleFlinkJobs Beijing https://vvp.console.alibabacloud.com/web/xxxxxx/en/#/workspaces/xxxx/namespaces/xxxx/operations/stream/xxxx my-access-key-id my-access-key-secret binlog

    A tabela a seguir descreve os parâmetros.

    Parâmetro

    Descrição

    region

    A região onde seu workspace do Realtime Compute for Apache Flink está localizado. Para a lista de valores válidos, consulte a tabela Region values.

    url

    A URL de qualquer job no workspace de destino do Realtime Compute for Apache Flink.

    AccessKey ID

    O AccessKey ID de uma conta com permissão para acessar o workspace do Realtime Compute for Apache Flink.

    AccessKey secret

    O AccessKey secret de uma conta com permissão para acessar o workspace do Realtime Compute for Apache Flink.

    binlog/rpc

    O tipo de conteúdo do job a ser verificado. Valores válidos:

    • binlog: Verifica todas as tabelas source de binlog do Hologres em todos os jobs do workspace.

    • rpc: Verifica todas as tabelas de dimensão ou tabelas de resultado que utilizam o modo rpc em todos os jobs do workspace.

    Valores de região (clique para expandir)

    Região

    Valor

    China (Beijing)

    Beijing

    China (Shanghai)

    Shanghai

    China (Hangzhou)

    Hangzhou

    China (Shenzhen)

    Shenzhen

    China (Zhangjiakou)

    Zhangjiakou

    China (Hong Kong)

    Hong Kong

    Singapore

    Singapore

    Germany (Frankfurt)

    Frankfurt

    Indonesia (Jakarta)

    Jakarta

    Malaysia (Kuala Lumpur)

    Kuala Lumpur

    US (Silicon Valley)

    us-west-1

    China East 2 Finance

    China East 2 Finance

  3. O código a seguir apresenta um exemplo de resultado.

    dwd_xxx nx not a running job, skip
    dwd_st xxx not a running job, skip
    dwd_xxx a not a running job, skip
    dia xxx not a hologres job, skip
    dwd_tr xxx ail not sql job, skip
    --- The following are Hologres binlog source tables that are on a version earlier than 8.0.5 and do not have sdkmode = jdbc set ---
    deploymentName                         version                              tableName
    ads_xxx                   xxx vvr-6.0.7-flink-1.15 adsdb.ads_xxx              xxx         xxx catalog
           xxx      vvr-8.0.1-flink-1.17 odsdb.ods_xxx      nts
    xxx           vvr-8.0.1-flink-1.17 dwsdb.dws_xxx             tag
    xxx       s vvr-8.0.1-flink-1.17 odsdb.ods_xxx        ers