我们有几个正在运行的Flink(1.5)作业。 他们中的大多数人都使用Kafka 0.8.2.2作为来源(我们正在努力升级Kafka,但这是另一回事了。)
我们的一些作业正在使用Flink会话窗口机制,而有些则未使用(仅映射/过滤事件的简单作业)。 另外,某些作业正在使用AsyncIO来丰富来自外部数据库的事件。
我们不时发现要为这些现有工作添加的错误或小功能。
为防止数据丢失,我们cancel
(使用savepoint
)进行相关作业,部署新的更新作业并从上一个savepoint
开始再次运行。
问题在于,在大多数情况下,我们尝试从最后一个savepoint
运行时遇到异常,这是有道理的,因为我们更改了作业代码,并且无法将savepoint
加载到记忆,对吧?
问题是,我们可以承受延迟(稍后将缩小差距),但我们不能承受数据丢失。
我saw的stop
CLI操作看起来很有希望,因为它应该优雅地执行。
stop
操作支持哪些Flink源?有支持该功能的Kafka版本吗?水槽类型也相关吗? (接收器接收器是否想完成向S3的上传?)stop
命令是否支持使用Windows的作业?如果是这样,它在会话窗口中的行为如何? 编辑:有时由于AsyncIO超时,我们也会在cancel
命令中看到它(例外)-
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