Apache flink 如何从Java中了解flink作业的状态?
我有一个正在运行的作业,我只想使用一次恢复重试,因为在此期间不会触发此flink重新启动,我有一个线程尝试解决问题,然后当问题解决后,flink将重新启动,但有时线程需要更长的时间来修复问题并触发重新启动策略,由于问题仍然存在而失败,然后作业停止,但线程可能有另一个迭代,然后应用程序永远不会死,因为我将它作为jar应用程序运行。所以,我的问题是:Apache flink 如何从Java中了解flink作业的状态?,apache-flink,flink-streaming,flink-cep,Apache Flink,Flink Streaming,Flink Cep,我有一个正在运行的作业,我只想使用一次恢复重试,因为在此期间不会触发此flink重新启动,我有一个线程尝试解决问题,然后当问题解决后,flink将重新启动,但有时线程需要更长的时间来修复问题并触发重新启动策略,由于问题仍然存在而失败,然后作业停止,但线程可能有另一个迭代,然后应用程序永远不会死,因为我将它作为jar应用程序运行。所以,我的问题是: 是否仍然可以从java代码中了解作业的状态?类似于(JobStatus.cancelled==true) 提前谢谢! 亲切的问候非常感谢菲利佩。这
- 是否仍然可以从java代码中了解作业的状态?类似于(JobStatus.cancelled==true)
亲切的问候非常感谢菲利佩。这就是我所需要的,多亏了你,一切都完成了。我在这里共享代码,以防其他人需要
final StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment(...);
final AtomicReference<JobID> jobIdReference = new AtomicReference<>();
//Environment configurations
env.registerJobListener(new JobListener() {
@Override
public void onJobSubmitted(@Nullable JobClient jobClient, @Nullable Throwable throwable) {
assert jobClient != null;
jobIdReference.set(jobClient.getJobID());
jobClient = jobClient /*jobClient static public object in the main class*/;
}@Override
public void onJobExecuted(@Nullable JobExecutionResult jobExecutionResult, @Nullable Throwable throwable) {
assert jobExecutionResult != null;
jobExecutionResult.notify();
}
});
为Flink创建JobListener还有一个悬而未决的问题。我想这就是你想要的。问题仍然存在,但已经实现了一些代码()。也许您可以尝试使用它
env.registerJobListener()代码>尝试模仿这个测试用例:这正是我想要的,我会尝试你的想法。谢谢!我很高兴能帮上忙。我自己也会试试
Preconditions.checkNotNull(jobClient);
final String status = jobClient.getJobStatus().get().name();
if (status.equals(JobStatus.FAILED.name())) System.exit(1);