我们在Google Kubernetes Engine上托管了一个NodeJS API,我们想开始将事件记录到BigQuery中。
我可以看到3种不同的方法:
对于这个特定用例,我们不需要进行任何转换,只会将事件直接发送到正确的格式。但是我们稍后可能会有其他用例,我们需要将主数据存储区(MySQL)中的表同步到BQ进行分析,所以可能马上从Dataflow开始是值得的吗?
几个问题:
答案 0 :(得分:4)
对于选项2,是的,有一个名为Google提供的模板的预设,可以方便地将数据从PubSub移动到BigQuery,而无需编写任何代码。
您可以在Cloud Dataflow documentation中详细了解如何使用此Google提供的模板及其他模板。
答案 1 :(得分:3)
另一种选择是使用日志接收器导出日志。从Stackdriver Logging UI开始,您可以为日志指定BigQuery(或其他目标)。由于您的Node API在Kubernetes中运行,您只需要将消息记录到stdout
,它们将自动写入Stackdriver。
参考:https://cloud.google.com/logging/docs/export/configure_export_v2
答案 2 :(得分:0)
我看了一下,感觉好像缺少答案。这是我可以告诉您的每种方法的优缺点:
(通过Node BQ API或自定义工作进程)编写自定义程序在一次保证时遇到了一些陷阱。具体来说,如果您编写自己的工作程序,则将需要执行额外的工作以检查检查点的进度,并确保在运行时错误或工作程序进程快死的情况下,不要删除或重复任何元素。
如果您的需求发生变化(例如执行BQ流插入变得过于昂贵),Dataflow的Java SDK无缝支持以下任一选项:流插入,或将便宜的多个加载作业插入BQ而不是流插入;并且还可以很好地处理多个数据源。
数据流可自动缩放,以防您的数据量增加。
考虑到这一点,我会说:
如果您的用例相对简单,并且可以在工作线程重新启动时删除非常罕见的数据点,那么您可以使用定制的Node / Python应用程序来解决问题。
< / li>如果您的用例仅涉及将PubSub流式传输到BQ,但是您必须确保没有丢失任何数据,请检查执行此操作的Template provided by Andrew。
如果用例可能比这更复杂,则可以考虑编写自己的管道(并使用Template code as inspiration!)。