我正在计划从PubSub主题的下标中安排具有PubSubIO.readString的数据流。在配置的间隔后如何终止工作?我的用例不是要使该工作持续一整天,因此希望排定开始的时间,然后在配置的间隔后从该工作中停止。
Pipeline
.apply(PubsubIO.readMessages().fromSubscription("some-subscription"))
答案 0 :(得分:2)
来自docs:
如果您需要停止正在运行的Cloud Dataflow作业,可以通过以下方式停止 使用Cloud Dataflow监控界面发出命令 或Cloud Dataflow命令行界面。
我认为您对通过控制台手动停止作业不感兴趣,因此可以使用命令行解决方案。如果您打算安排数据流作业运行,例如每天,那么您也知道要在哪个时间停止(启动时间+“配置的间隔”)。在这种情况下,您可以将cron作业配置为每天的gcloud dataflow jobs cancel
运行。例如,以下脚本将取消当天已启动的所有活动作业:
#!/bin/bash
gcloud dataflow jobs list --status=active --created-after=-1d \
| awk '{print $1;}' | tail -n +2 \
| while read -r JOB_ID; do gcloud dataflow jobs cancel $JOB_ID; done
另一种解决方案是使用Runtime.getRuntime.exec()
在Java代码中调用gcloud
命令。您可以按照here的规定,使用java.util.Timer().schedule()
将其安排为在特定间隔后运行。这样,无论您何时启动作业,都可以确保在指定的时间间隔后作业将停止。
更新
@RoshanFernando在注释中正确地指出,实际上有一个SDK method要取消管道。