我有一个Pub / Sub主题,它会定期(通常每隔几天或几周,但有时更频繁地)接收批量消息。我想启动一个批处理Dataflow作业来读取这些消息,执行一些转换,将结果写入数据存储区,然后停止运行。当一批新消息消失时,我想开始一份新工作。我已经阅读了Apache Beam Python SDK文档和许多SO问题,但我仍然不确定一些事情。
Pub / Sub IO可以作为非流媒体作业的一部分阅读吗?然后可以使用Datastore IO(目前不支持流式传输)编写相同的作业吗?我可以假设默认的全局窗口和触发器将正确地告诉作业何时停止从Pub / Sub读取(当不再写入一批消息时)?或者我是否需要添加某种触发/窗口方案,如最大时间或最大元素数?当触发时,触发器会告诉全局窗口关闭并因此结束工作吗?
编辑:错误地回答假设这是Java Beam with Dataflow。
道歉,我错过了这是为Python。
根据here中添加的this pull request文档,Python中的流模式明确不支持数据存储。文档中存在不一致的地方,它声称支持Pub / Sub的Python批处理模式,而linked code表示它仅在流管道中受支持。我已经提交了一个Jira bug试图解决这个问题。
这似乎不是python流模式下Dataflow当前支持的用例。我建议您考虑使用Java版本的Apache Beam,而supports streaming writes into Datastore。