Ce tutoriel explique comment utiliser le modèle Flux de modifications Bigtable vers Pub/Sub, y compris comment configurer un sujet et le modèle. Vous pouvez éventuellement créer une fonction Cloud Run, dans le langage de programmation de votre choix, qui est déclenchée par le flux d'événements.
Ce tutoriel s'adresse aux utilisateurs techniques qui connaissent Bigtable, la programmation et les services de streaming d'événements.
Créer un sujet Pub/Sub
Dans la console Google Cloud , accédez à la page Sujets de Pub/Sub.
Cliquez sur Create topic (Créer un sujet).
Définissez
bigtable-change-stream-topic
comme ID.Sélectionnez Utiliser un schéma.
Dans le menu déroulant Sélectionner un schéma Pub/Sub, cliquez sur Créer un schéma. Un nouvel onglet s'ouvre, dans lequel vous définissez le schéma.
- Définissez l'ID du schéma sur
bigtable-change-stream-schema
. - Définissez le type de schéma sur Avro.
- Collez le code suivant en tant que définition du schéma. Pour en savoir plus sur le schéma, consultez la page de documentation sur les modèles.
{ "name" : "ChangelogEntryMessage", "type" : "record", "namespace" : "com.google.cloud.teleport.bigtable", "fields" : [ { "name" : "rowKey", "type" : "bytes"}, { "name" : "modType", "type" : { "name": "ModType", "type": "enum", "symbols": ["SET_CELL", "DELETE_FAMILY", "DELETE_CELLS", "UNKNOWN"]} }, { "name": "isGC", "type": "boolean" }, { "name": "tieBreaker", "type": "int"}, { "name": "columnFamily", "type": "string"}, { "name": "commitTimestamp", "type" : "long"}, { "name" : "sourceInstance", "type" : "string"}, { "name" : "sourceCluster", "type" : "string"}, { "name" : "sourceTable", "type" : "string"}, { "name": "column", "type" : ["null", "bytes"]}, { "name": "timestamp", "type" : ["null", "long"]}, { "name": "timestampFrom", "type" : ["null", "long"]}, { "name": "timestampTo", "type" : ["null", "long"]}, { "name" : "value", "type" : ["null", "bytes"]} ] }
- Cliquez sur Créer pour créer le schéma.
- Définissez l'ID du schéma sur
Fermez l'onglet Créer un schéma, actualisez la liste des schémas, puis sélectionnez le schéma que vous venez de définir.
Cliquez sur Créer pour créer le sujet.
Facultatif : Créer une fonction Cloud Run
Vous pouvez traiter le flux Pub/Sub avec une fonction Cloud Run.
- Sur la page Détails du sujet
bigtable-change-stream-topic
, cliquez sur Déclencher une fonction Cloud . - Dans le champ Nom de la fonction, saisissez le nom
bt-ps-tutorial-function
. - Dans la section Code source, cliquez sur le menu déroulant Environnement d'exécution, puis sélectionnez l'environnement d'exécution et le langage de programmation de votre choix. Un
hello world
est généré et affiche le flux de modifications à mesure qu'il arrive. Pour en savoir plus sur l'écriture de fonctions Cloud Run, consultez la documentation. - Utilisez les valeurs par défaut pour tous les autres champs.
- Cliquez sur Déployer la fonction.
Créer une table avec un flux de modifications activé
Dans la console Google Cloud , accédez à la page Instances de Bigtable.
Cliquez sur l'ID de l'instance que vous utilisez pour ce tutoriel.
Si vous ne disposez pas d'instance, créez-en une avec les configurations par défaut dans une région proche de vous.
Dans le volet de navigation de gauche, cliquez sur Tables.
Cliquez sur Créer une table.
Nommez la table
change-streams-pubsub-tutorial
.Ajoutez une famille de colonnes nommée
cf
.Sélectionnez Activer le flux de modifications.
Cliquez sur Créer.
Initialiser un pipeline de données pour capturer le flux de modifications
- Sur la page Tables de Bigtable, recherchez votre table
change-streams-pubsub-tutorial
. - Dans la colonne Flux de modifications, cliquez sur Connecter.
- Dans la boîte de dialogue, sélectionnez Pub/Sub.
- Cliquez sur Créer un job Dataflow.
- Sur la page Dataflow Créer un job, définissez le nom du sujet Pub/Sub de sortie sur
bigtable-change-stream-topic
. - Définissez l'ID du profil d'application Bigtable sur
default
. - Cliquez sur Run Job (Exécuter la tâche).
- Attendez que l'état du job soit Démarrage ou En cours d'exécution avant de continuer. Une fois le job mis en file d'attente, il faut environ cinq minutes pour qu'il soit exécuté.
Écrire des données dans Bigtable
Dans Cloud Shell, écrivez quelques lignes dans Bigtable pour que le journal des modifications puisse écrire des données dans le flux Pub/Sub. Tant que vous écrivez les données après la création du job, les modifications apparaissent. Vous n'avez pas besoin d'attendre que l'état du job devienne
running
.cbt -instance=BIGTABLE_INSTANCE_ID -project=YOUR_PROJECT_ID \ set change-streams-pubsub-tutorial user123 cf:col1=abc cbt -instance=BIGTABLE_INSTANCE_ID -project=YOUR_PROJECT_ID \ set change-streams-pubsub-tutorial user546 cf:col1=def cbt -instance=BIGTABLE_INSTANCE_ID -project=YOUR_PROJECT_ID \ set change-streams-pubsub-tutorial user789 cf:col1=ghi
Afficher les journaux des modifications dans Pub/Sub
Dans la console Google Cloud , accédez à la page Abonnements de Pub/Sub.
Cliquez sur l'abonnement créé automatiquement pour votre sujet
bigtable-change-stream-topic
. Il doit être nommébigtable-change-stream-topic-sub
.Accédez à l'onglet Messages.
Cliquez sur Extraire.
Explorez la liste des messages et affichez les données que vous avez écrites.
(Facultatif) Afficher les modifications dans les journaux Cloud Run Functions
Si vous avez créé une fonction Cloud Run Functions, vous pouvez afficher les modifications dans les journaux.
Dans la console Google Cloud , accédez à Cloud Run Functions.
Cliquez sur votre fonction
bt-ps-tutorial-function
.Accédez à l'onglet Journaux.
Assurez-vous que Severity (Gravité) est défini sur au moins Info (Info) pour que vous puissiez voir les journaux.
Explorez les journaux et affichez les données que vous avez écrites.
La sortie ressemble à ceci :
Pub/Sub message: {"rowKey":"user789","modType":"SET_CELL","isGC":false,"tieBreaker":0,"columnFamily":"cf","commitTimestamp":1695653833064548,"sourceInstance":"YOUR-INSTANCE","sourceCluster":"YOUR-INSTANCE-c1","sourceTable":"change-streams-pubsub-tutorial","column":{"bytes":"col1"},"timestamp":{"long":1695653832278000},"timestampFrom":null,"timestampTo":null,"value":{"bytes":"ghi"}}