流式计算中,端到端表示从外部读取数据、中间处理、数据输出外部三个处理环节。在理想状态即7*24任务不出错或者异常情况下,也就是每一步处理都正常,那么就能保证最终处理输出的数据正确,但是在实际的情况中,可能会出现网络、磁盘、脏数据、OOM等各种异常导致程序失败,也就是端到端任何一个处理环节都有可能失败,为了保证最终数据的正确性,需要提供一种机制保障在面对任何情况的情况下,任务仍然恢复到正确的状态,也就是本篇要说的端到端的一致性。
流式计算三种处理语义
At-Most-Once
At-Most-Once 表示至多处理一次,在端到端的整个处理流程中,每一个环节至多会被处理一次,通常发生在某一个处理环节在出现失败导致异常的情况下,下游节点是无法获取到该节点的处理数据的,因为失败的数据不会被重试或者是恢复,所以是至多一次
At-Least-Once
At-Least-Once 表示至少处理一次,可能由于中间由于某个环节异常(处理消息异常、提交offset异常等) 导致消息被重复消费重新进入整个处理流程中
Exactly-Once
Exactly-Once 表示恰好处理一次,在端到端的整个流程中,消息只会被正确处理一次。
有没有真正的Exactly-Once?
Exactly-Once的处理语义