2015-08-14 33 views
0

我们目前正在使用谷歌任务队列来分批请求,以将分析数据存储到Keen和Stathat(批量投入更高性能)。为了从任务队列中消耗,我们有一组流程代理和工作者从任务队列中消耗。将数据流看作是我们只是编写推送到我们的分析解决方案的逻辑的地方,我们可以指定在我们的数据流程序中进行处理时批处理的大小,我很好奇数据流的开销(似乎更多更大的应用程序)非常适合。这是Dataflow的一个很好的用例吗?

回答

2

您的用例对于Dataflow来说似乎很不错。您可以发布到pubsub作为将数据流式传输到Dataflow作业的方式,而不是发布到任务队列。您的数据流作业可以使用Dataflow窗口和触发器根据大小和/或时间批量处理数据。然后,您可以将每批写入您的数据存储。

数据流应该适用于小数据集。开销可能会以数据流工作者未使用的CPU周期为代价。数据流允许您控制工作人员的数量,以便您可以分配多个适合您的数据大小的工作人员。

利用率取决于您的负载在多大程度上均匀分布。如果您的峰值和平均负载差异很大,那么您可以在延迟和利用率之间进行权衡。如果你想保持低延迟,那么你可以选择工人的数量,以便在高峰期保持高速运转。另一方面,如果要最大限度地利用利用率,则可以根据平均负载来配置工作人员的数量。在高峰时段,您将开始在pubsub中积累积压的消息。系统将在非高峰时段有剩余容量时摆脱积压。

现在Dataflow不支持为无界数据编写自定义接收器。解决此问题的一种方法是从DoFn而不是接收器进行写入。这应该工作得很好,只要你可以以幂等的方式进行写操作,以便多次写入记录不会导致问题。

窗口和触发器是一种将数据划分为可以应用聚合(例如分组,求和等)的有限批量的方法。这blog post解释它比我更好(看“窗口”部分)。

+0

我相信这会要求我们编写自定义接收器,并在此处声明:https://cloud.google.com/dataflow/model/custom-io “数据流计划添加对定制接收器的支持未来版本中的无限数据 “ 从文档中我不完全清楚,但是窗口/触发器是否掩盖了数据无界的事实? –

+0

从文档中我不完全清楚,但是窗口/触发器是否掩盖了数据无界的事实? 触发器文档还不完全清楚: https://cloud.google.com/dataflow/model/triggers “注意:您可以为无界PCollection设置触发器,该无限PCollection使用其单个全局窗口窗口功能... “ –

+0

增加了两个段落来解决您的问题。请让我知道如果它仍然不清楚。 –

相关问题