Flink-如何解决错误这项工作不可停止

时间:2018-12-12 02:42:10

标签: apache-flink flink-streaming

我试图通过flink stop停止工作

flink stop [jobid]

但是CLI会引发错误,并且不允许我停止作业。我可以取消它。 这可能是什么原因?

  

停止作业c7196bb1d21d679efed73770a4e4f9ed。

     

-------------------------------------------------- -------------程序完成,但有以下异常:

     

org.apache.flink.util.FlinkException:无法停止作业   c7196bb1d21d679efed73770a4e4f9ed。           在org.apache.flink.client.cli.CliFrontend.lambda $ stop $ 5(CliFrontend.java:557)           在org.apache.flink.client.cli.CliFrontend.runClusterAction(CliFrontend.java:988)           在org.apache.flink.client.cli.CliFrontend.stop(CliFrontend.java:550)           在org.apache.flink.client.cli.CliFrontend.parseParameters(CliFrontend.java:1065)           在org.apache.flink.client.cli.CliFrontend.lambda $ main $ 11(CliFrontend.java:1129)           在org.apache.flink.runtime.security.NoOpSecurityContext.runSecured(NoOpSecurityContext.java:30)           在org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1129)   引起原因:java.util.concurrent.ExecutionException:   org.apache.flink.runtime.rest.util.RestClientException:[作业   终止(STOP)失败:此作业不可停止。]           在java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)           在java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1915)           在org.apache.flink.client.program.rest.RestClusterClient.stop(RestClusterClient.java:392)           在org.apache.flink.client.cli.CliFrontend.lambda $ stop $ 5(CliFrontend.java:555)           ... 6更多原因:org.apache.flink.runtime.rest.util.RestClientException:[作业   终止(STOP)失败:此作业不可停止。]           在org.apache.flink.runtime.rest.RestClient.parseResponse(RestClient.java:351)           在org.apache.flink.runtime.rest.RestClient.lambda $ submitRequest $ 3(RestClient.java:335)           在java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:952)           在java.util.concurrent.CompletableFuture $ UniCompose.tryFire(CompletableFuture.java:926)           在java.util.concurrent.CompletableFuture $ Completion.run(CompletableFuture.java:442)           在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)           在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)           在java.lang.Thread.run(Thread.java:748)

2 个答案:

答案 0 :(得分:0)

要使Flink作业可停止,它的所有源都必须实现Stoppable接口,在这种情况下,仍然很少有这样做。在与Flink捆绑在一起的源连接器中,只有Storm SpoutWrapper,TwitterSource和NifiSource支持停止。

您似乎应该使用Stop,但是对于大多数目的,cancel命令更为合适。与取消相反,停止的唯一可想到的好处是可以避免结果丢失或重复。但是,如果您使用的是实现检查点接口的连接器(例如Kafka连接器),则关闭作业的方式都没关系-无论如何,您都可以实现一次语义。

答案 1 :(得分:0)

我使用了 cancel 命令来终止flink strem作业。

function check(arr, el) {
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] === el) {
      return true;
    }
  }
  return false;
}