我们正在运行一个处理多个输入流的Dataflow作业。其中一些是高流量,其中一些很少通过。我们使用“共享”流加入所有流,其中包含与所有元素相关的信息。这是管道的简化示例:
我注意到作业不会产生任何输出,直到两个流包含一些流量。
例如,假设Stream 1
获得稳定的流量,而Stream 2
在一段时间内不会产生任何消息。此时,作业的DAG将显示在GroupByKey
步骤中累积的元素,但不会传播任何元素。我还可以看到Flatten PCollections步骤显示图表左侧但不是右侧的输入元素。这会在同一作业中处理高流量和低流量流时产生问题,因为它会导致输出延迟Stream 2
获取消息所需的时间。
我不确定观察结果是否正确,但是我想问一下这是否是Flatten / GroupByKey的一般工作方式,如果是这样的话,如果我们看到的问题可以通过构建管道的替代方法来避免
(示例JobID:2017-02-10_06_48_01-14191266875301315728)
答案 0 :(得分:2)
如group-by-key文档中所述,默认行为是等待窗口中的所有数据到达 - 这对于确保下游结果的正确性是必要的。
根据您要执行的操作,您可以使用triggers来更早地输出聚合。
您也可以使用慢速流作为side-input来处理快速流。
如果你仍然陷入困境,如果你可以更详细地描述流的内容以及你如何使用它们会有所帮助,因为更详细的答案取决于目标。