org.apache.flink.runtime.checkpoint.CheckpointException: Algunas tareas del trabajo ya han terminado
Quiero detener una tarea de Flink mediante una API REST, y envío la solicitud: http://192.168.215.165:8081/jobs/c952ba860604a2c32a7abb9eb5b42b0d/stop, luego obtengo la respuesta:
{
"request-id": "29c559399243c817055ebbaf7431a8d2"
}
Y luego envío la solicitud: http://192.168.215.165:8081/jobs/c952ba860604a2c32a7abb9eb5b42b0d/savepoints/29c559399243c817055ebbaf7431a8d2, obtengo la respuesta (parte de ella):
{
"status": {
"id": "COMPLETED"
},
"operation": {
"failure-cause": {
"class": "java.util.concurrent.CompletionException",
"stack-trace": "java.util.concurrent.CompletionException: org.apache.flink.runtime.checkpoint.CheckpointException: Some tasks of the job have already finished and checkpointing with finished tasks is not enabled. Failure reason: Not all required tasks are currently running.\n\tat java.util.concurrent.CompletableFuture.encodeRelay(CompletableFuture.java:326)\n\tat java.util.concurrent.CompletableFuture.completeRelay(CompletableFuture.java:338)\n\tat java.util.concurrent.CompletableFuture.uniRelay(CompletableFuture.java:925)\n\tat java.util.concurrent.CompletableFuture$UniRelay.tryFire(CompletableFuture.java:913)\n\tat java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)\n\tat java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)\n\tat org.apache.flink.runtime.rpc.akka.AkkaInvocationHandler.lambda$invokeRpc$0(AkkaInvocationHandler.java:246)\n\tat java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)\n\tat java.util.concurrent.
¿Cómo puedo detener un trabajo de Flink mediante API REST, por favor?
davy.ai
Para detener un trabajo de Flink utilizando la API REST, debes enviar una solicitud POST al siguiente endpoint:
Donde
:jobid
es eljobId
del trabajo de Flink que deseas detener.En tu caso, la solicitud enviada es correcta:
La respuesta que recibiste indica que la solicitud se realizó correctamente y Flink ha generado un ID de solicitud para la operación:
Para guardar el estado de un trabajo de Flink utilizando la API REST, debes enviar una solicitud POST al siguiente endpoint:
Donde
:jobid
es eljobId
del trabajo de Flink que deseas guardar.En tu caso, enviaste la solicitud al endpoint correcto:
Sin embargo, la respuesta que recibiste indica que la operación falló debido a que algunas tareas del trabajo ya han finalizado y no se ha habilitado la creación de puntos de control con tareas finalizadas. Para resolver esto, debes habilitar la creación de puntos de control con tareas finalizadas para el trabajo configurando la opción de configuración
state.checkpoints.allow-non-restored-state
entrue
.En resumen, para detener un trabajo de Flink mediante la API REST, envía una solicitud POST al endpoint
/jobs/:jobid/stop
con eljobId
del trabajo que deseas detener. Para guardar el estado de un trabajo de Flink, envía una solicitud POST al endpoint/jobs/:jobid/savepoints
con eljobId
del trabajo que deseas guardar. Si encuentras un error debido a tareas finalizadas, habilita la creación de puntos de control con tareas finalizadas configurando la opción de configuraciónstate.checkpoints.allow-non-restored-state
entrue
.