我有一个ParDo,它使用状态和计时器,并定期更新PcollectionView作为该parDo的sideInput;谷歌数据流将引发异常,在这种情况下不允许使用计时器。还有另一种方法可以在没有sideInput的情况下将配置数据馈送到parDo?本质上,sideInput是大约每24小时从数据存储读取一次的配置数据映射。
我目前正在尝试查看是否可以在具有状态和计时器的ParDo之前创建ParDo,以定期更新配置,但是我看不到如何从下一个ParDo中访问该映射。有什么建议吗?
注意:该管道在具有全局窗口的流模式下运行,并在pubsub消息到达时读取它们。数据存储区用于保存决定何时将元素输出到pubsub主题所需的数据。
答案 0 :(得分:0)
您可以使用固定窗口来定期使用数据源更新PCollectionView,而不是使用状态计时器来更新侧面输入:
PCollectionView<Map<String,String>> sideInput = pipeline
.apply(notifications)
.apply(
Window.<Long>into(FixedWindows.of(Duration.standardMinutes(refreshMinutes)))
.triggering(
Repeatedly.forever(AfterPane.elementCountAtLeast(1))
)
.withAllowedLateness(Duration.ZERO)
.discardingFiredPanes()
)
.apply( /* query data source */ )
.apply(View.<Map<String,String>>asSingleton());