Connecteur Bigtable Flink
Apache Flink est un framework de traitement de flux qui vous permet de manipuler des données en temps réel. Si vous disposez d'une table Bigtable, vous pouvez utiliser un connecteur Bigtable Flink pour diffuser, sérialiser et écrire des données de votre source de données spécifiée dans Bigtable. Le connecteur vous permet d'effectuer les opérations suivantes à l'aide de l'API Apache Flink Table ou de l'API Datastream:
- Créer un pipeline
- Sérialiser les valeurs de votre source de données dans des entrées de mutation Bigtable
- Écrivez ces entrées dans votre table Bigtable.
Ce document décrit le connecteur Bigtable Flink et ce que vous devez savoir avant de l'utiliser. Avant de lire ce document, vous devez connaître Apache Flink, le modèle de stockage de Bigtable et les écritures Bigtable.
Pour utiliser le connecteur, vous devez disposer d'une table Bigtable préexistante qui servira de point de destination des données. Vous devez créer les familles de colonnes de la table avant de démarrer le pipeline. Les familles de colonnes ne peuvent pas être créées lors de l'écriture. Pour en savoir plus, consultez la section Créer et gérer des tables.
Le connecteur est disponible sur GitHub. Pour en savoir plus sur l'installation du connecteur, consultez le dépôt du connecteur Bigtable Flink. Pour obtenir des exemples de code illustrant l'utilisation du connecteur, consultez le répertoire flink-examples-gcp-bigtable.
Sérialiseurs
Le connecteur Flink dispose de trois sérialiseurs intégrés que vous pouvez utiliser pour convertir les données en entrées de mutation Bigtable:
GenericRecordToRowMutationSerializer
: pour les objetsGenericRecord
AVRORowDataToRowMutationSerializer
: pour les objetsRowData
FlinkFunctionRowMutationSerializer
: pour la logique de sérialisation personnalisée à l'aide d'une fonction fournie
Vous pouvez également choisir de créer votre propre sérialiseur personnalisé héritant de BaseRowMutationSerializer
.
Modes de sérialisation
Lorsque vous utilisez le connecteur Flink, vous choisissez l'un des deux modes de sérialisation. Le mode spécifie comment vos données sources sont sérialisées pour représenter vos familles de colonnes Bigtable, puis écrire votre table Bigtable. Vous devez utiliser l'un ou l'autre des modes.
Mode Famille de colonnes
En mode famille de colonnes, toutes les données sont écrites dans une seule famille de colonnes spécifiée. Les champs imbriqués ne sont pas acceptés.
Mode Lignes imbriquées
En mode lignes imbriquées, chaque champ de niveau supérieur représente une famille de colonnes. La valeur du champ de premier niveau (RowKeyField) est un autre champ. La valeur de ce champ comporte un objet de ligne pour chaque colonne de la famille de colonnes Bigtable. En mode lignes imbriquées, tous les champs autres que le champ de premier niveau doivent être des objets de ligne. Les lignes à double imbrication ne sont pas acceptées.
Traitement de type "exactement une fois"
Dans Apache Flink, exactement une fois signifie que chaque enregistrement de données d'un flux est traité exactement une fois, ce qui empêche tout traitement en double ou toute perte de données, même en cas de défaillance du système.
Une mutation mutateRow
Bigtable est idempotente par défaut. Par conséquent, une requête d'écriture ayant la même clé de ligne, la même famille de colonnes, la même colonne, le même code temporel et la même valeur ne crée pas de nouvelle cellule, même si elle est réessayée. Cela signifie que lorsque vous utilisez Bigtable comme point de terminaison de données pour un framework Apache Flink, vous obtenez automatiquement un comportement "exactly-once", à condition de ne pas modifier le code temporel lors des nouvelles tentatives et que le reste de votre pipeline réponde également aux exigences de "exactly-once".
Pour en savoir plus sur la sémantique de type "exactement une fois", consultez la section Présentation du traitement de bout en bout de type "exactement une fois" dans Apache Flink.