我们经常会混淆flink提供的状态一致性保证和数据端到端一致性保证的关系,总以为他们表达的是同一个意思,事实上,他们不是一个含义,flink只能保证其维护的内部状态的一致性,而数据端到端的一致性需要数据源,flink,数据汇都要满足一定的条件才能完成
数据端到端的一致性保证要比flink内部状态一致性保证严格的多,即使flink内部状态做到了一致性保证,也就是无论在什么情况下,其内部状态都可以做到精确一致的保证,但是如果数据源不支持可重置或者数据汇做不到幂等性或者不支持事务,那么所谓的端到端的一致性也无从谈起,下面这张图可以表明他们的关系
由上图可知,flink内部状态的一致性保证是端到端一致性保证的其中一个环节,我们通常这里所说的一致性保证是指flink实现的精确一次的语义,如果是至少一次或者至多一次保证,那么flink连自身的内部状态一致性都没法得到保证,就更别提整个端到端的一致性保证了