数据流管道在执行 GroupBy 之前等待来自所有流的元素

Dataflow pipeline waits for elements from all streams before performing GroupBy

我们是 运行 处理多个输入流的数据流作业。其中一些流量很大,而另一些则很少收到消息。我们将所有流与 "shared" 流连接起来,其中包含与所有元素相关的信息。这是管道的简化示例:

我注意到该作业不会产生任何输出,直到 两个 流都包含一些流量。

例如,假设 Stream 1 获得了稳定的流量,而 Stream 2 在一段时间内没有产生任何消息。这次,作业的 DAG 将显示在 GroupByKey 步骤中累积的元素,但不会传播超出它的任何内容。我还可以看到 Flatten PCollections 步骤显示了图表左侧的输入元素,而不是右侧的输入元素。这在处理同一作业中的高流量 低流量流时会产生问题,因为它会导致输出延迟与 Stream 2 挑选所需的时间一样多上消息。

我不确定观察是否正确,但我想问一下 Flatten/GroupByKey 是否通常是这样工作的,如果是这样,我们看到的问题是否可以通过其他方式避免构建管道。

(例如 JobID:2017-02-10_06_48_01-14191266875301315728)

group-by-key 的文档中所述,默认行为是等待 window 内的所有数据都已到达——这是确保 down-stream 结果正确性所必需的.

根据您要执行的操作,您可以使用 triggers 使聚合更早地输出。

您也可以使用 slow-stream 作为 side-input 对 fast-stream 的处理。

如果您仍然遇到困难,如果您能更详细地描述流的内容以及您如何尝试使用它们,将会有所帮助,因为更详细的答案取决于目标。