Connecteur Flink Bigtable
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 Flink Bigtable pour diffuser, sérialiser et écrire des données de la 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érialisez 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 Flink Bigtable 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 Bigtable et les écritures Bigtable.
Pour utiliser le connecteur, vous devez disposer d'une table Bigtable préexistante qui servira de récepteur de données. Vous devez créer les familles de colonnes de la table avant de démarrer le pipeline. Vous ne pouvez pas les créer lors de l'écriture. Pour en savoir plus, consultez Créer et gérer des tables.
Le connecteur est disponible sur GitHub. Pour savoir comment installer le connecteur, consultez le dépôt Flink Bigtable Connector. Pour obtenir des exemples de code montrant comment utiliser le connecteur, consultez le répertoire flink-examples-gcp-bigtable.
Sérialiseurs
Le connecteur Flink comporte trois sérialiseurs intégrés que vous pouvez utiliser pour convertir des données en entrées de mutation Bigtable :
GenericRecordToRowMutationSerializer
: pour les objets AVROGenericRecord
RowDataToRowMutationSerializer
: pour les objets FlinkRowData
FunctionRowMutationSerializer
: pour une logique de sérialisation personnalisée à l'aide d'une fonction fournie
Vous pouvez également choisir de créer votre propre sérialiseur personnalisé en 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 la manière dont vos données sources sont sérialisées pour représenter vos familles de colonnes Bigtable, puis écrites dans votre table Bigtable. Vous devez utiliser l'un ou l'autre de ces modes.
Mode de la 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 premier niveau 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, à l'exception du 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, l'expression exactement une fois signifie que chaque enregistrement de données d'un flux est traité exactement une fois, ce qui évite 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 qui comporte 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 cellule, même si elle est réessayée. Cela signifie que lorsque vous utilisez Bigtable comme récepteur de données pour un framework Apache Flink, vous obtenez automatiquement un comportement "exactement une fois", à condition de ne pas modifier le code temporel lors des nouvelles tentatives et que le reste de votre pipeline réponde également aux exigences "exactement une fois".
Pour en savoir plus sur la sémantique de type "exactement une fois", consultez Présentation du traitement de bout en bout de type "exactement une fois" dans Apache Flink.
Étapes suivantes
- Connecteur Bigtable Beam
- Connecteur de récepteur Bigtable Kafka Connect
- Intégrations avec Bigtable
- Documentation de référence de l'API Datastream