这是 Dataflow 的一个很好的用例吗?

Is this a good use-case for Dataflow?

我们目前正在使用 google 任务队列对将分析数据存储到 Keen 和 Stathat 中的请求进行批处理(批处理的性能更高)。为了从任务队列中消费,我们有一组流程代理和工作人员从任务队列中消费。看到数据流是我们只是编写用于推送到我们的分析解决方案的逻辑的东西,并且我们可以在我们的数据流程序中处理时指定要提取的批处理大小,我很好奇数据流的开销(似乎更适合更大的应用程序)很合适。

您的用例似乎很适合 Dataflow。您可以发布到 pubsub 作为将数据流式传输到 Dataflow 作业的一种方式,而不是发布到任务队列。您的数据流作业可以使用数据流 windows 和触发器根据大小 and/or 时间对数据进行批处理。然后您可以将每个批次写入您的数据存储。

Dataflow 应该适用于小型数据集。开销可能是未使用的 CPU 个 Dataflow worker 周期的成本。 Dataflow 允许您控制工作人员的数量,以便您可以分配适合您的数据大小的工作人员数量。

利用率将取决于您的负载在时间上分布的均匀程度。如果您的峰值负载和平均负载相差很大,那么您可以在延迟和利用率之间做出权衡。如果你想保持低延迟,那么你可以选择工作人员的数量,以便在高峰时段跟上。另一方面,如果你想最大化利用率,你可以根据平均负载配置工作人员的数量。在高峰时段,您会开始在 pubsub 中积压消息。当有空闲容量时,系统将在非高峰时段消除积压。

目前 Dataflow 不支持为无限数据编写自定义接收器。解决此问题的一种方法是从 DoFn 而不是接收器进行写入。如果您可以以幂等方式进行写入,那么这应该可以正常工作,这样多次写入记录就不会导致问题。

窗口化和触发器是一种将数据分成有限批次的方法,可以对其应用聚合(例如分组、求和等)。这个 blog post 比我解释得更好(请参阅 "windowing" 部分)。