关于Async I/O的exactly-once

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

关于Async I/O的exactly-once

star
看文档我的理解是会将异步的请求保存在检查点中,failover的时候重新触发请求。我的问题是既然是重新触发请求,并没有回滚,那之前的请求已经对外部系统造成影响了,不就是at least-once了吗?
比如ck1:发送了a b c三个请求更新外部数据库,ck2:发送:d,e,f。假设ck1做完了checkpoint,a ,b请求成功,c没成功.


ck2在执行到e的时候任务被cancel了,但c,d都已经成功了。那么我重新启动的时候从最近一次成功的ck1拉起,c,d岂不是又要被重新请求一次


谢谢

发自我的iPhone
Reply | Threaded
Open this post in threaded view
|

Re: 关于Async I/O的exactly-once

Dino Zhang
hi star,

exactly-once指flink内部的,要保证end-to-end
exactly可以通过两阶段提交,需要实现TwoPhaseCommitSinkFunction,或者做幂等处理

On Wed, Sep 4, 2019 at 8:20 AM star <[hidden email]> wrote:

> 看文档我的理解是会将异步的请求保存在检查点中,failover的时候重新触发请求。我的问题是既然是重新触发请求,并没有回滚,那之前的请求已经对外部系统造成影响了,不就是at
> least-once了吗?
> 比如ck1:发送了a b c三个请求更新外部数据库,ck2:发送:d,e,f。假设ck1做完了checkpoint,a ,b请求成功,c没成功.
>
>
> ck2在执行到e的时候任务被cancel了,但c,d都已经成功了。那么我重新启动的时候从最近一次成功的ck1拉起,c,d岂不是又要被重新请求一次
>
>
> 谢谢
>
> 发自我的iPhone



--
Regards,
DinoZhang
Reply | Threaded
Open this post in threaded view
|

回复:关于Async I/O的exactly-once

star
感谢您的回复,异步io只能针对失败的异步请求 重发,而不能保证每个请求只发一次,那应该是at least once?附文档:The asynchronous I/O operator offers full exactly-once fault tolerance guarantees. It stores the records for in-flight asynchronous requests in checkpoints and restores/re-triggers the requests when recovering from a failure.

发自我的iPhone


------------------ 原始邮件 ------------------
发件人: Dino Zhang <[hidden email]&gt;
发送时间: 2019年9月4日 09:20
收件人: user-zh <[hidden email]&gt;
主题: 回复:关于Async I/O的exactly-once



hi star,

exactly-once指flink内部的,要保证end-to-end
exactly可以通过两阶段提交,需要实现TwoPhaseCommitSinkFunction,或者做幂等处理

On Wed, Sep 4, 2019 at 8:20 AM star <[hidden email]&gt; wrote:

&gt; 看文档我的理解是会将异步的请求保存在检查点中,failover的时候重新触发请求。我的问题是既然是重新触发请求,并没有回滚,那之前的请求已经对外部系统造成影响了,不就是at
&gt; least-once了吗?
&gt; 比如ck1:发送了a b c三个请求更新外部数据库,ck2:发送:d,e,f。假设ck1做完了checkpoint,a ,b请求成功,c没成功.
&gt;
&gt;
&gt; ck2在执行到e的时候任务被cancel了,但c,d都已经成功了。那么我重新启动的时候从最近一次成功的ck1拉起,c,d岂不是又要被重新请求一次
&gt;
&gt;
&gt; 谢谢
&gt;
&gt; 发自我的iPhone



--
Regards,
DinoZhang
Reply | Threaded
Open this post in threaded view
|

Re: 关于Async I/O的exactly-once

Biao Liu
1. 首先你描述的场景,不只存在于 Async IO operator,其他 operator 也会有类似问题
2. Flink 的 exactly once 是针对 Flink 内部而言,例如 state 等,[1]
3. 如果你想针对外部系统也保证 exactly once 语义,需要对应的 connector 支持 [2]

1.
https://ci.apache.org/projects/flink/flink-docs-release-1.9/internals/stream_checkpointing.html
2.
https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/connectors/guarantees.html

Thanks,
Biao /'bɪ.aʊ/



On Wed, 4 Sep 2019 at 12:58, star <[hidden email]> wrote:

> 感谢您的回复,异步io只能针对失败的异步请求 重发,而不能保证每个请求只发一次,那应该是at least once?附文档:The
> asynchronous I/O operator offers full exactly-once fault tolerance
> guarantees. It stores the records for in-flight asynchronous requests in
> checkpoints and restores/re-triggers the requests when recovering from a
> failure.
>
> 发自我的iPhone
>
>
> ------------------ 原始邮件 ------------------
> 发件人: Dino Zhang <[hidden email]&gt;
> 发送时间: 2019年9月4日 09:20
> 收件人: user-zh <[hidden email]&gt;
> 主题: 回复:关于Async I/O的exactly-once
>
>
>
> hi star,
>
> exactly-once指flink内部的,要保证end-to-end
> exactly可以通过两阶段提交,需要实现TwoPhaseCommitSinkFunction,或者做幂等处理
>
> On Wed, Sep 4, 2019 at 8:20 AM star <[hidden email]&gt; wrote:
>
> &gt;
> 看文档我的理解是会将异步的请求保存在检查点中,failover的时候重新触发请求。我的问题是既然是重新触发请求,并没有回滚,那之前的请求已经对外部系统造成影响了,不就是at
> &gt; least-once了吗?
> &gt; 比如ck1:发送了a b c三个请求更新外部数据库,ck2:发送:d,e,f。假设ck1做完了checkpoint,a
> ,b请求成功,c没成功.
> &gt;
> &gt;
> &gt;
> ck2在执行到e的时候任务被cancel了,但c,d都已经成功了。那么我重新启动的时候从最近一次成功的ck1拉起,c,d岂不是又要被重新请求一次
> &gt;
> &gt;
> &gt; 谢谢
> &gt;
> &gt; 发自我的iPhone
>
>
>
> --
> Regards,
> DinoZhang