我们在生产中有好几个flink(1.5)工作。它们中的大多数使用kafka 0.8.2.2作为源代码(我们正在努力升级kafka,但那是另一回事)。
我们的一些作业正在使用flink会话窗口机制,而有些作业没有(只Map/过滤事件的简单作业)。此外,有些作业正在使用asyncio来丰富外部数据库中的事件。
有时我们会发现我们想要为那些现有作业添加的bug或小特性。
为了防止数据丢失,我们 cancel
相关工作(与 savepoint
),部署新的更新作业,并从上一个开始重新运行它 savepoint
.
问题是,大多数情况下,我们在尝试从最后一个运行时会遇到异常 savepoint
这是有道理的,因为我们改变了工作代码和 savepoint
无法载入内存,对吗?
问题是,我们可以承受延迟(稍后我们将缩小差距),但我们不能承受数据丢失。
我看到了 stop
cli操作看起来很有前途,因为它应该优雅地完成它。
支持的flink源代码是什么 stop
手术?有Kafka版本支持这一点吗?Flume类型是否也相关(bucketing sink可能想完成上传到s3?)
是吗 stop
使用windows的命令支持作业?如果是,它在会话窗口中的行为如何?
在不丢失数据的情况下更新现有/正在运行的flink作业的最佳实践是什么?
编辑:有时我们会在 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
暂无答案!
目前还没有任何答案,快来回答吧!