Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform Apache beam/PubSub处理文件前的时间延迟_Google Cloud Platform_Google Cloud Dataflow_Apache Beam_Google Cloud Pubsub - Fatal编程技术网

Google cloud platform Apache beam/PubSub处理文件前的时间延迟

Google cloud platform Apache beam/PubSub处理文件前的时间延迟,google-cloud-platform,google-cloud-dataflow,apache-beam,google-cloud-pubsub,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,Google Cloud Pubsub,我需要延迟处理或发布文件名(文件)。 我在寻找最好的选择 目前,我有两个apachebeam数据流和PubSub。第一个数据流从源读取文件名并将其推送到PubSub-topic。另一个数据流读取并处理它们。但是,我的用例是在源文件中创建实际文件至少1小时后开始处理/读取它们 所以我有两个选择: 1) 延迟发布消息以便立即处理它,但要在良好/预期的时刻 2) 延迟处理检索到的文件 如上所述,我正在寻找最好的解决方案。我不确定Apache Beam中是否应该使用guava重试机制?还有其他想法吗 您

我需要延迟处理或发布文件名(文件)。 我在寻找最好的选择

目前,我有两个apachebeam数据流和PubSub。第一个数据流从源读取文件名并将其推送到PubSub-topic。另一个数据流读取并处理它们。但是,我的用例是在源文件中创建实际文件至少1小时后开始处理/读取它们

所以我有两个选择:

1) 延迟发布消息以便立即处理它,但要在良好/预期的时刻

2) 延迟处理检索到的文件


如上所述,我正在寻找最好的解决方案。我不确定Apache Beam中是否应该使用guava重试机制?还有其他想法吗

您可以通过在发布作业中触发/窗口配置来实现所需的功能

然后,您可以定义一个窗口配置,其中触发器直到延迟1小时后才会触发。比如:

Window.<String>into(FixedWindows.of(Duration.standardMinutes(1))
      .triggering(AfterProcessingTime.pastFirstElementInPane()
                  .plusDelayOf(Duration.standardHours(1)))
Window.into(FixedWindows.of(持续时间.标准分钟(1))
.触发(后处理time.pastFirstElementInPane()
.plusDelayOf(持续时间.标准小时(1)))
请记住,最终您将得到一个作业,该作业除了保持状态一个小时外,什么都不做。此外,上述内容仅基于处理时间,因此,即使文件的实际创建时间足够长,可以立即发出结果,它也会在作业开始后等待一个小时


您可以将其细化为事件时间触发器,但可能需要编写自己的代码来为记录(文件名)分配时间戳。据我所知,Beam目前不具备读取文件创建时间的内置支持。例如,当通过
TextIO
读取文件时,我观察到所有记录都被分配了一个默认静态时间戳。您应该检查用于读取文件名的转换的细节,看看它是否有一些作用您还可以使用带有时间戳的
转换来自行分配时间戳。

您可以通过在发布作业中触发/窗口配置来实现所需的功能

然后,您可以定义一个窗口配置,在该配置中,触发器直到延迟1小时后才会触发。类似于:

Window.<String>into(FixedWindows.of(Duration.standardMinutes(1))
      .triggering(AfterProcessingTime.pastFirstElementInPane()
                  .plusDelayOf(Duration.standardHours(1)))
Window.into(FixedWindows.of(持续时间.标准分钟(1))
.触发(后处理time.pastFirstElementInPane()
.plusDelayOf(持续时间.标准小时(1)))
请记住,最终您将得到一个作业,该作业除了保持状态一个小时外,什么都不做。此外,上述内容仅基于处理时间,因此,即使文件的实际创建时间足够长,可以立即发出结果,它也会在作业开始后等待一个小时

您可以将其细化为事件时间触发器,但可能需要编写自己的代码来为记录(文件名)分配时间戳。据我所知,Beam目前不具备读取文件创建时间的内置支持。例如,当通过
TextIO
读取文件时,我观察到所有记录都被分配了一个默认静态时间戳。您应该检查用于读取文件名的转换的细节,看看它是否有一些作用您还可以使用
with timestamps
转换自行分配时间戳