Conetor do Flink Bigtable
O Apache Flink é uma framework de processamento de streams que lhe permite manipular dados em tempo real. Se tiver uma tabela do Bigtable, pode usar um conetor do Flink Bigtable para fazer stream, serializar e escrever dados da sua origem de dados especificada para o Bigtable. O conetor permite-lhe fazer o seguinte através da API Apache Flink Table ou da API Datastream:
- Crie um pipeline
- Serializar os valores da sua origem de dados em entradas de mutação do Bigtable
- Escreva essas entradas na sua tabela do Bigtable
Este documento descreve o conetor do Flink Bigtable e o que precisa de saber antes de o usar. Antes de ler este documento, deve estar familiarizado com o Apache Flink, o modelo de armazenamento do Bigtable e as gravações do Bigtable.
Para usar o conetor, tem de ter uma tabela do Bigtable pré-existente para servir como o seu destino de dados. Tem de criar as famílias de colunas da tabela antes de iniciar o pipeline. Não é possível criar famílias de colunas na gravação. Para mais informações, consulte Criar e gerir tabelas.
O conetor está disponível no GitHub. Para ver informações sobre a instalação do conetor, consulte o repositório Flink Bigtable Connector. Para ver exemplos de código que demonstram como usar o conector, consulte o diretório flink-examples-gcp-bigtable.
Serializadores
O conetor Flink tem três serializadores incorporados que pode usar para converter dados em entradas de mutação do Bigtable:
GenericRecordToRowMutationSerializer
: para objetos AVROGenericRecord
RowDataToRowMutationSerializer
: para objetos FlinkRowData
FunctionRowMutationSerializer
: Para lógica de serialização personalizada que usa uma função fornecida
Também pode optar por criar o seu próprio serializador personalizado herdado de
BaseRowMutationSerializer
.
Modos de serialização
Quando usa o conector do Flink, escolhe um de 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, escritos na tabela do Bigtable. Tem de usar um dos modos.
Modo de família de colunas
No modo de família de colunas, todos os dados são escritos numa única família de colunas especificada. Os campos aninhados não são suportados.
Modo de linhas aninhadas
No modo de linhas aninhadas, cada campo de nível superior representa uma família 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 na família de colunas do Bigtable. No modo de linhas aninhadas, todos os campos que não sejam o campo de nível superior têm de ser objetos de linhas. As linhas com aninhamento duplo não são suportadas.
Processamento exatamente uma vez
No Apache Flink, exatamente uma vez significa que cada registo de dados numa stream é processado exatamente uma vez, o que impede o processamento duplicado ou a perda de dados, mesmo em caso de falhas do sistema.
Uma mutação do Bigtable é idempotente por predefinição, pelo que um pedido de escrita com a mesma chave de linha, família de colunas, coluna, data/hora e valor não cria uma nova célula, mesmo que seja repetido.mutateRow
Isto significa que, quando usa o Bigtable como o destino de dados para uma framework do Apache Flink, obtém automaticamente o comportamento exatamente uma vez, desde que não altere a data/hora nas novas tentativas e o resto do pipeline também satisfaça os requisitos exatamente uma vez.
Para mais informações sobre a semântica exatamente uma vez, consulte o artigo Uma vista geral do processamento exatamente uma vez ponto a ponto no Apache Flink.
O que se segue?
- Conetor Bigtable Beam
- Conetor de destino do Bigtable Kafka Connect
- Integrações com o Bigtable
- Referência da API Datastream