没有接收器的流数据流管道

时间:2017-01-24 19:51:39

标签: google-cloud-dataflow

我们在Google Cloud Dataflow上运行了一个流式数据流管道 需要从Pu​​bSub订阅组读取的工作者 消息,并将它们写入BigQuery。内置的BigQuery Sink可以 因为我们需要定位特定的数据集和表格,所以不符合我们的需求 对于每个小组。由于流媒体不支持自定义接收器 管道,似乎唯一的解决方案是执行插入 ParDo中的操作。像这样:

enter image description here

是否有任何已知的问题,在管道中没有接收器,或者在编写此类管道时需要注意什么?

1 个答案:

答案 0 :(得分:4)

没有接收器编写管道应该没有任何问题。实际上,接收器是流式传输中的ParDo类型。

我建议您使用自定义ParDo并将BigQuery API与自定义逻辑一起使用。以下是BigQuerySink的定义,您可以使用此代码作为起点。

您可以定义类似于StreamingWriteFn的自己的DoFn来添加自定义ParDo逻辑,该逻辑将写入相应的BigQuery数据集/表。

请注意,这是使用Reshuffle而不是GroupByKey。我建议您使用Reshuffle,它也将按键分组,但避免不必要的窗口延迟。在这种情况下,它意味着元素应该在它们进入时立即写出,而不需要额外的缓冲/延迟。此外,这允许您在运行时确定BQ表名称。

编辑:我不建议使用内置的BigQuerySink写入不同的表。这个建议是在自定义DoFn中使用BigQuery API,而不是使用BigQuerySink