2017-06-13 291 views

回答

1

是的,你肯定可以用Flink做到这一点。您想要了解savepoints,可以从command lineREST API触发。

更新

正常情况下,流处理器的目标是做新的元素不断,立即处理,因为它们变得可用。如果你想暂停处理,那么我想这可能是为了忽略一段时间的源代码并放弃到达的事件,或者希望一段时间保存计算资源,然后恢复而不丢失任何内容输入。

RichCoFlatmapCoProcessFunction是您可能会觉得有用的构建基块。您可以设置连接到套接字(例如)的控制流,并且当您想要“暂停”主要流时,发送一个事件,使主要流开始丢弃其输入,或者进行阻止读取或休眠, 例如。

或者您可能会考虑在作业上添加自己的抽象层,并应对jobids会改变的事实。请注意,作业的名称在保存点/重新启动时保持不变。

+0

据我所知,用保存点开始一项工作将创建一个新的工作,该工作将使用不同的jobID,尽管使用了保存点。我的意思是不改变jobID,我们可以停止工作,然后重新开始工作。 – yuqi

+0

我明白了。为什么你最终会得到一份新工作是一个问题?虽然我不明白你要怎么做,但是如果你更详细地解释你希望完成的事情,我们可以找到一种方法来逼近它。 (另外,您是使用批处理还是流式处理?) –

+0

“为什么会有新工作结束的问题?”对于这个问题,我做了一个以jobId为唯一键的项目,并且在作业结束或删除之前保持不变。例如,我们创建一个ID为xxxx的flink流作业,然后supspend它,过了一段时间,我们想恢复它。然而,flink现在使用stop/cancel来暂停一个作业,并通过保存点再次运行作业来恢复它,但是,现在jobID不是xxxx,所以,我徘徊是否有解决方案让jobId保持不变?认为,顺便说一句,我上面提到的只涉及流工作。认为 – yuqi