Conector Flink Bigtable

O Apache Flink é um framework de processamento de fluxos que permite manipular dados em tempo real. Se você tiver uma tabela do Bigtable, use um conector do Flink Bigtable para transmitir, serializar e gravar dados da fonte especificada no Bigtable. Com o conector, é possível fazer o seguinte usando a API Table do Apache Flink ou a API Datastream:

  1. Criar um pipeline
  2. Serializar os valores da sua fonte de dados em entradas de mutação do Bigtable
  3. Grave essas entradas na sua tabela do Bigtable.

Este documento descreve o conector do Flink Bigtable e o que você precisa saber antes de usá-lo. Antes de ler este documento, familiarize-se com o Apache Flink, o modelo de armazenamento do Bigtable e gravações do Bigtable.

Para usar o conector, é necessário ter uma tabela do Bigtable preexistente que sirva como um coletor de dados. É preciso criar os grupos de colunas da tabela antes de iniciar o pipeline. Eles não podem ser criados na gravação. Para mais informações, consulte Criar e gerenciar tabelas.

O conector é compatível com a versão 2.1.0 do Apache Flink e está disponível no GitHub. Para informações sobre como instalar o conector, consulte o repositório Flink Bigtable Connector. Para exemplos de código que demonstram como usar o conector, consulte o diretório flink-examples-gcp-bigtable.

Serializadores

O conector do Flink tem três serializadores integrados que podem ser usados para converter dados em entradas de mutação do Bigtable:

  • GenericRecordToRowMutationSerializer: para objetos GenericRecord do AVRO
  • RowDataToRowMutationSerializer: para objetos RowData do Flink.
  • FunctionRowMutationSerializer: para lógica de serialização personalizada usando uma função fornecida

Você também pode criar seu próprio serializador personalizado herdando de BaseRowMutationSerializer.

Modos de serialização

Ao usar o conector do Flink, você escolhe um de dois modos de serialização. O modo especifica como os dados de origem são serializados em entradas de mutação que são gravadas em grupos de colunas na tabela do Bigtable. Use um dos modos.

Modo de grupo de colunas

No modo de grupo de colunas, todos os dados são gravados em um único grupo especificado. Campos aninhados não são compatíveis.

Modo de linhas aninhadas

No modo de linhas aninhadas, cada campo de nível superior representa um grupo de colunas. O valor do campo de nível superior (RowKeyField) é outro campo. O valor desse campo tem um objeto de linha para cada coluna no grupo de colunas do Bigtable. No modo de linhas aninhadas, todos os campos, exceto o de nível superior, precisam ser objetos de linha. Não é possível usar linhas aninhadas duas vezes.

Opções de configuração

Para configurar o desempenho e o comportamento do conector, use várias opções. Para mais informações sobre essas opções, consulte a documentação do conector no GitHub.

Processamento único

No Apache Flink, exatamente uma vez significa que cada registro de dados em um stream é processado exatamente uma vez, evitando qualquer processamento duplicado ou perda de dados, mesmo em caso de falhas no sistema.

Uma mutação mutateRow do Bigtable é idempotente por padrão. Portanto, uma solicitação de gravação com a mesma chave de linha, grupo de colunas, coluna, carimbo de data/hora e valor não cria uma nova célula, mesmo que seja repetida. Quando você usa o Bigtable como o coletor de dados para um framework Apache Flink, você recebe o comportamento de execução única exata automaticamente, desde que as seguintes condições sejam atendidas:

  • Não defina o carimbo de data/hora para usar o carimbo de data/hora do lado do servidor (-1) em novas tentativas.
  • O restante do pipeline atende aos requisitos de execução exatamente uma vez.

Para mais informações sobre a semântica de entrega única, consulte Uma visão geral do processamento de entrega única de ponta a ponta no Apache Flink.

A seguir