flink checkpoint时exact-one模式和atleastone模式的区别
背景:
flink在开启checkpoint的时候有两种模式可以选择,exact-one和atleastone模式,那么这两种模式有什么区别呢?
exact-one和atleastone模式的区别
先说结论:exact-one可以完全做到状态的一致性,而atleastone模式正常情况下没法做到状态的一致性,如果开启这个模式,有些消息会重复处理,例如统计计数时,重复的消息会导致统计两次
那么为什么会这样呢?原理如下:
简单来说,主要的区别在于两种模式下对于接收到ckp分隔符后对齐过程中是否继续处理已经收到ckp分隔符的chanel的记录的不同,exactone是ckp分隔符对齐过程中先缓存记录不处理,而atleastone在ckp分隔符对齐过程中正常处理消息,这样这些消息就会被当成这次ckp的状态的一部分,而其实它不应该是这次ckp状态的一部分,而在应用从最新的ckp启动后,这些记录又有重新消费,叠加上之前已经成为ckp状态的那一次,相当于消息被重复处理了两次,所以才被称为atleastone模式
彩蛋:那么atleastone有可能达到exactone一样的效果吗?
有,前提是作业不需要包含对齐操作,也就是比如只包含map,fliter等并行算子,完全不需要分隔符对齐,但是这种情况下应该直接设置为exactone就完事了,不用故意使用atleastone的
lixia0417mul2: 要看下源码才行,这里想表达的是不要定义相同的state名称,否则可能会乱
Xiaolz297: 这里为什么会指向同一个地址
lixia0417mul2: 是的,就是这样理解
新IT民工: 我有个疑问,你的意思是切换后,AB节点访问域名访问到的是旧的ip,然后获取cluster slots的时候就能更新正确;c节点也同理,唯一的不同是旧的ip已经连接不上去了,才出现这个问题?
lixia0417mul2: 可以看参考文献的资料。里面有一个类似的demo