通过Google Pub/Sub + Dataflow直接流入BigQuery的优缺点

ren*_*udg 16 google-bigquery google-cloud-pubsub google-cloud-dataflow

我们在Google Kubernetes Engine上托管了NodeJS API,我们想开始将事件记录到BigQuery中.

我可以看到3种不同的方法:

  1. 使用API​​中的Node BigQuery SDK将每个事件直接插入BigQuery(如"流式插入示例"中所述:https://cloud.google.com/bigquery/streaming-data-into-bigquery或此处:https:/ /github.com/googleapis/nodejs-bigquery/blob/7d7ead644e1b9fe8428462958dbc9625fe6c99c8/samples/tables.js#L367)
  2. 将每个事件发布到Cloud Pub/Sub主题,然后编写Cloud Dataflow管道以将其流式传输到BigQuery(仅在Java或Python中),例如https://blog.doit-intl.com/replacing-mixpanel- with-bigquery-dataflow-and-kubernetes-b5f844710674https://github.com/bomboradata/pubsub-to-bigquery
  3. 将每个事件从API发布到Pub/Sub主题,但不是Dataflow使用自定义工作进程,该进程在一侧订阅Pub/Sub主题并在另一侧流入BQ.像这里:https: //github.com/GoogleCloudPlatform/kubernetes-bigquery-python/blob/master/pubsub/pubsub-pipe-image/pubsub-to-bigquery.py 或在这里:https://github.com/mchon89 /Google_PubSub_BigQuery/blob/master/pubsub_to_bigquery.py

对于这个特定的用例,我们不需要进行任何转换,只是将事件直接发送到正确的格式.但是我们稍后可能会有其他用例,我们需要将主数据存储区(MySQL)中的表同步到BQ进行分析,所以可能马上从Dataflow开始值得吗?

几个问题 :

  • 选项1(直接向BQ发送单个事件)似乎最简单,如果你没有任何变换.它是否像发布Pub/Sub主题一样快速可靠?我主要关注延迟和错误/重复处理(https://cloud.google.com/bigquery/troubleshooting-errors#streaming).也许这在单独的过程中做得更好?
  • 对于选项2,是否有任何数据流"预设"不需要您编写自定义代码,只需要从Pu​​b/Sub +读取可靠地发送到BQ而不进行转换(可能只是重复数据删除/错误处理)
  • 有一个简单的自定义工作程序(选项3)是否有任何缺点,从Pub/Sub读取然后流入BQ并执行所有错误处理/重试等?

And*_* Mo 4

对于选项 2,是的,有一个名为 Google 提供的模板的预设,可以方便将数据从 PubSub 移动到 BigQuery,而无需编写任何代码。

您可以在Cloud Dataflow 文档中详细了解如何使用此 Google 提供的模板及其他模板。