Nous avons une API NodeJS hébergée sur Google Kubernetes Engine et nous aimerions commencer à enregistrer les événements dans BigQuery.
Je peux voir 3 façons différentes de le faire:
Pour ce cas d'utilisation particulier, nous n'avons pas besoin de transformer, nous allons simplement envoyer les événements directement dans le bon format. Mais nous aurons peut-être plus tard d'autres cas d'utilisation pour lesquels nous aurons besoin de synchroniser les tables de notre magasin de données principal (MySQL) vers BQ pour l'analyse, alors peut-être que commencer immédiatement avec Dataflow en vaut la peine?
Quelques questions :
Oui, il existe un paramètre prédéfini appelé Modèle fourni par Google qui facilite le déplacement des données de PubSub vers BigQuery sans avoir à écrire de code.
Pour en savoir plus sur l’utilisation de ce modèle fourni par Google et d’autres, consultez la documentation Cloud Dataflow .
Une autre option consiste à exporter les journaux à l'aide d'un collecteur de journaux. Dès l'interface utilisateur de journalisation Stackdriver, vous pouvez spécifier BigQuery (ou d'autres destinations) pour vos journaux. Puisque votre API de nœud est en cours d’exécution dans Kubernetes, il vous suffit de consigner vos messages dans stdout
. Ils seront automatiquement écrits dans Stackdriver.
Référence: https://cloud.google.com/logging/docs/export/configure_export_v2
J'ai jeté un coup d'œil à cela, et j'ai l'impression que les réponses manquent quelque peu. Voici ce que je peux vous dire sur les avantages et les inconvénients de chaque approche:
L'écriture d'un programme personnalisé (via l'API Node BQ ou un processus de travail personnalisé) présente quelques pièges lorsqu'il s'agit de garantir une seule fois les garanties . Plus précisément, si vous écrivez vous-même votre ouvrier, vous devrez effectuer un travail supplémentaire pour vérifier la progression du point de contrôle et vous assurer qu'aucun élément n'est oublié ou dupliqué en cas d'erreur d'exécution ou de mort de votre processus de travail.
Si vos besoins changent (par exemple, effectuer des insertions de streaming BQ devient trop coûteux), le SDK Java de Dataflow prend en charge de manière transparente l'une des options suivantes: les insertions en streaming ou le moins coûteux d'effectuer plusieurs tâches de chargement dans BQ au lieu d'insertions en streaming; et il gère également plusieurs sources de données.
Dataflow fournit une mise à l'échelle automatique automatique en cas d'augmentation du volume de vos données.
Dans cet esprit, je dirais:
Si votre cas d'utilisation est relativement simple et que des points de données très rares sont supprimés lors des redémarrages d'ouvriers, vous pouvez utiliser une application Node/Python personnalisée, qui devrait faire l'affaire pour vous.
Si votre cas d'utilisation implique uniquement la diffusion de PubSub vers BQ, mais que vous devez vous assurer qu'aucune donnée n'est supprimée, consultez le modèle fourni par Andrew qui fait exactement cela.
Si votre cas d'utilisation est susceptible d'être plus complexe que cela, vous pouvez envisager d'écrire votre propre pipeline (et utiliser le code Template comme source d'inspiration !).