数据流作业的初始状态

时间:2016-02-08 20:42:33

标签: google-cloud-dataflow

我正在试图弄清楚我们如何“播种”某些流式数据流作业的窗口状态。场景是我们有一个论坛消息流,我们希望一直为每个主题发出一个运行的消息计数,因此我们有一个带有全局窗口的流数据流作业,并且每次有一个主题的记录进入时都会触发到目前为止一切都很好。但是在流源之前,我们有一个大文件,我们想要处理这些文件以获取我们的历史记录,因为主题永远存在,我们需要历史计数来通知流源的输出,所以我们很友好'我需要相同的逻辑来运行文件,然后在文件耗尽时开始在流源上运行,同时保持窗口状态。

目前的想法:

  • 编写一个自定义无限制的源代码。读取文件直到它耗尽,然后开始从流中读取。没有多大乐趣,因为编写自定义资源并不是很有趣。
  • 在文件上以批处理模式运行逻辑,并且最后一步以某种方式将状态发送到流接收器,然后具有从状态流和数据流读取的逻辑启动的流式版本,以及以某种方式结合了两者。这似乎有一定道理,但不确定如何确保流式作业在读取数据流之前从状态源读取所有内容,然后进行初始化。
  • 将历史数据传输到流中,编写从两个流中读取的作业。与第二种解决方案相同的问题,不确定如何确保首先“消耗”一个流。

编辑:最新选项,以及我们要做的是,编写计算工作,使得事件到达的顺序无关紧要,因此我们只需将存档推送到pub /子主题,它将全部工作。这在这种情况下有效,但显然它会影响下游消费者(需要支持更新或撤消),所以我有兴趣知道人们有什么其他解决方案来播种他们的窗口状态。

1 个答案:

答案 0 :(得分:2)

您可以在项目符号2中执行建议---运行两个管道(在同一个主管道中),第一个填充大文件中的pubsub主题。这类似于StreamingWordExtract示例所做的。