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 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 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 para representar os grupos de colunas do Bigtable e gravados na tabela do Bigtable. É preciso usar um modo ou outro.

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.

Processamento único

No Apache Flink, exatamente uma vez significa que cada registro de dados em um fluxo é 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. Isso significa que, quando você usa o Bigtable como o coletor de dados para um framework do Apache Flink, recebe o comportamento de 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 de 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