Apache flink 停止与取消Flink作业

Apache flink 停止与取消Flink作业,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我们在生产中有几个Flink(1.5)工作。 其中大多数使用卡夫卡0.8.2.2作为源代码(我们正在努力升级卡夫卡,但那是另一回事) 我们的一些作业使用Flink会话窗口机制,而有些作业则不使用(仅映射/过滤事件的简单作业)。 此外,一些作业正在使用AsyncIO来丰富外部数据库中的事件 有时我们会发现我们想要为这些现有作业添加的bug或小功能 为防止数据丢失,我们取消相关作业(使用保存点),部署新更新的作业,并从上一个保存点再次运行它 问题是,大多数情况下,我们在尝试从最后一个保存点运行时都会

我们在生产中有几个Flink(1.5)工作。 其中大多数使用卡夫卡0.8.2.2作为源代码(我们正在努力升级卡夫卡,但那是另一回事)

我们的一些作业使用Flink会话窗口机制,而有些作业则不使用(仅映射/过滤事件的简单作业)。 此外,一些作业正在使用AsyncIO来丰富外部数据库中的事件

有时我们会发现我们想要为这些现有作业添加的bug或小功能

为防止数据丢失,我们
取消相关作业(使用
保存点
),部署新更新的作业,并从上一个
保存点
再次运行它

问题是,大多数情况下,我们在尝试从最后一个
保存点运行时都会遇到异常,这是有意义的,因为我们更改了作业代码,并且
保存点
无法加载到内存中,对吗

问题是,我们可以承受延迟(稍后我们将缩小差距),但我们无法承受数据丢失

我支持
stop
CLI操作,这看起来很有希望,因为它应该优雅地完成

  • 优雅的
    stop
    操作支持哪些Flink源?有卡夫卡版本支持这一点吗?水槽类型是否也相关?(Bucketing接收器可能希望完成到S3的上传?)
  • stop
    命令是否支持使用windows的作业?如果是,它在会话窗口中的行为如何
  • 在不丢失数据的情况下更新现有/运行Flink作业的最佳做法是什么
编辑:有时我们也会在
取消
命令中看到它(异常)-由于异步IO超时:

java.lang.Exception: An async function call terminated with an exception. Failing the AsyncWaitOperator.
    at org.apache.flink.streaming.api.operators.async.Emitter.output(Emitter.java:137)
    at org.apache.flink.streaming.api.operators.async.Emitter.run(Emitter.java:85)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.TimeoutException: Async function call has timed out.
    at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
    at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
    at org.apache.flink.streaming.api.operators.async.queue.StreamRecordQueueEntry.get(StreamRecordQueueEntry.java:68)
    at org.apache.flink.streaming.api.operators.async.Emitter.output(Emitter.java:129)
    ... 2 more
Caused by: java.util.concurrent.TimeoutException: Async function call has timed out.
    at org.apache.flink.streaming.api.operators.async.AsyncWaitOperator$1.onProcessingTime(AsyncWaitOperator.java:212)
    at org.apache.flink.streaming.runtime.tasks.SystemProcessingTimeService$TriggerTask.run(SystemProcessingTimeService.java:281)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    ... 1 more

什么样的异常?关于更改作业代码和使用您可以使用的“旧”保存点数据-