我们在Google Kubernetes Engine上托管了一个NodeJS API,并希望开始将事件记录到BigQuery中。
我可以看到有三种不同的方法来实现这一目标:
一些问题:
1.如果您没有任何转换要做,则选项1(直接将单个事件发送到BQ)似乎最简单。它是否与发布到Pub / Sub主题一样快速和可靠?我主要关心延迟和错误/重复处理(https://cloud.google.com/bigquery/troubleshooting-errors#streaming)。也许这应该在单独的进程中完成?
2.对于选项2,是否有任何Dataflow“预设”,当您只需要从Pub / Sub读取+可靠地发送到BQ而无需进行任何转换(可能只是去重/错误处理)时,不需要编写自定义代码?
3.是否有任何缺点,如果有一个简单的自定义工作程序(选项3),它从Pub / Sub读取然后流式传输到BQ并执行所有错误处理/重试等操作?
我可以看到有三种不同的方法来实现这一目标:
- 使用Node BigQuery SDK中的API将每个事件直接插入BigQuery(如在“Streaming Insert Examples”下所述:https://cloud.google.com/bigquery/streaming-data-into-bigquery 或这里:https://github.com/googleapis/nodejs-bigquery/blob/7d7ead644e1b9fe8428462958dbc9625fe6c99c8/samples/tables.js#L367)
- 将每个事件发布到Cloud Pub/Sub主题,然后编写一个Cloud Dataflow管道将其流式传输到BigQuery(似乎只能使用Java或Python),例如此处https://blog.doit-intl.com/replacing-mixpanel-with-bigquery-dataflow-and-kubernetes-b5f844710674 或此处https://github.com/bomboradata/pubsub-to-bigquery
- 从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
一些问题:
1.如果您没有任何转换要做,则选项1(直接将单个事件发送到BQ)似乎最简单。它是否与发布到Pub / Sub主题一样快速和可靠?我主要关心延迟和错误/重复处理(https://cloud.google.com/bigquery/troubleshooting-errors#streaming)。也许这应该在单独的进程中完成?
2.对于选项2,是否有任何Dataflow“预设”,当您只需要从Pub / Sub读取+可靠地发送到BQ而无需进行任何转换(可能只是去重/错误处理)时,不需要编写自定义代码?
3.是否有任何缺点,如果有一个简单的自定义工作程序(选项3),它从Pub / Sub读取然后流式传输到BQ并执行所有错误处理/重试等操作?
应用程序 -> PubSub -> Dataflow(流处理)-> BigQuery
。这是Google推荐的模式,也是最具容错性和可扩展性的模式。您还将连接Stackdriver日志记录到管道等。 - Graham Polley