Conector Flink Bigtable

O Apache Flink é um framework de processamento de fluxo que permite manipular dados em tempo real. Se você tiver uma tabela do Bigtable, poderá usar um conector do Bigtable do Flink para transmitir, serializar e gravar dados da fonte de dados especificada no Bigtable. O conector permite fazer o seguinte, usando a API Apache Flink Table 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. Gravar essas entradas na tabela do Bigtable

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

Para usar o conector, você precisa ter uma tabela do Bigtable que sirva como destino de dados. É necessário 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 está disponível no GitHub. Para informações sobre como instalar o conector, consulte o repositório do Conector do Flink Bigtable. 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 que herda de BaseRowMutationSerializer.

Modos de serialização

Ao usar o conector Flink, você escolhe um dos dois modos de serialização. O modo especifica como os dados de origem são serializados para representar as famílias de colunas do Bigtable e, em seguida, como a tabela do Bigtable é gravada. É preciso usar um dos modos.

Modo de grupo de colunas

No modo de família de colunas, todos os dados são gravados em uma única família de colunas especificada. Não é possível usar campos aninhados.

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 duplamente aninhadas.

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 do 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. Isso significa que, quando você usa o Bigtable como o destino de dados de um framework do Apache Flink, você recebe o comportamento exatamente uma vez automaticamente, desde que não mude o carimbo de data/hora nas novas tentativas e o restante do pipeline também atenda aos requisitos exatamente uma vez.

Para mais informações sobre a semântica exatamente uma vez, consulte Visão geral do processamento de ponta a ponta exatamente uma vez no Apache Flink.

A seguir