开发者社区 问答 正文

关于Async I/O的exactly-once

看文档我的理解是会将异步的请求保存在检查点中,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岂不是又要被重新请求一次*来自志愿者整理的flink邮件归档

展开
收起
毛毛虫雨 2021-12-08 11:11:45 401 分享 版权
1 条回答
写回答
取消 提交回答
    1. 首先你描述的场景,不只存在于 Async IO operator,其他 operator 也会有类似问题
    2. Flink 的 exactly once 是针对 Flink 内部而言,例如 state 等,[1]
    3. 如果你想针对外部系统也保证 exactly once 语义,需要对应的 connector 支持 [2]*来自志愿者整理的flink邮件归档
    2021-12-08 19:25:27
    赞同 展开评论