Google cloud dataflow 数据流作业的初始状态

Google cloud dataflow 数据流作业的初始状态,google-cloud-dataflow,Google Cloud Dataflow,我试图找出我们如何为一些流数据流作业“播种”窗口状态。场景是,我们有一个论坛消息流,我们希望始终为每个主题发出一个正在运行的消息计数,因此我们有一个带有全局窗口的流数据流作业,并在每次收到主题记录时触发发送。到目前为止一切都很好。但是在流源之前,我们有一个大文件,我们想处理它来获得历史计数,而且,因为主题永远存在,我们需要历史计数来通知流源的输出,所以我们需要同样的逻辑来运行文件,然后在文件耗尽时开始运行流源,同时保持窗口状态 目前的想法: 编写一个自定义的无界源代码来实现这一点。读取文件,直

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

目前的想法:

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

编辑:最新的选择,也是我们要做的,是编写计算作业,这样事件到达的顺序就无关紧要了,所以我们只需将存档推到发布/订阅主题,它就可以工作了。在这种情况下,这是可行的,但显然它会影响下游消费者(需要支持更新或收回),因此我很想知道人们有哪些其他解决方案来播种他们的窗口状态。

您可以按照要点2中的建议做——运行两条管道(在同一个主管道中),第一个从大文件填充pubsub主题。这与示例所做的类似。

是的,我看到我们可以通过Pub/Sub将数据放入流式作业中,问题更多的是我们是否可以先从“回填”主题读取作业,而不是试图同时读取这两个主题,因此具有截然不同的事件时间戳。除了上面的编辑,我们将计算设计为不知道事件发生的顺序,并使我们的目的地支持这样的输出,这将起作用。干杯