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

Streaming Dataflow pipeline with no sink

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

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

编写没有接收器的管道应该没有任何问题。其实sink就是streaming中的一种ParDo

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

您可以定义自己的 DoFn,类似于 StreamingWriteFn 以添加您的自定义 ParDo 逻辑,这将写入适当的 BigQuery dataset/table。

请注意,这是使用 Reshuffle 而不是 GroupByKey。我建议您使用 Reshuffle,它也将按键分组,但要避免不必要的窗口延迟。在这种情况下,意味着元素一进来就应该写出,没有额外的buffering/delay。此外,这允许您在运行时确定 BQ table 名称。

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