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:
- Criar um pipeline
- Serializar os valores da sua fonte de dados em entradas de mutação do Bigtable
- 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 objetosGenericRecord
do AVRORowDataToRowMutationSerializer
: para objetosRowData
do FlinkFunctionRowMutationSerializer
: 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.