apache-flink通过从检查点恢复作业来保证故障和恢复时只处理一次,检查点是分布式数据流和操作员状态的一致快照(分布式快照的chandy-lamport算法)。此保证仅在故障转移时提供一次。
在正常集群操作的情况下,flink如何保证只执行一次处理,例如给定一个从外部源读取的flink源(比如kafka),flink如何保证从源读取一次事件?事件源和flink源之间是否存在任何类型的应用程序级确认?另外,flink如何保证事件从上游运营商到下游运营商只传播一次?这是否也需要对接收到的事件进行任何类型的确认?
1条答案
按热度按时间js5cn81o1#
flink不能保证每个事件都从源代码中读取一次。相反,它保证每个事件只影响托管状态一次。
检查点包括源偏移量,在检查点还原过程中,源被重绕,并且一些事件可能被重放。这很好,因为检查点包含了整个作业的状态,该状态是从读取所有内容到检查点中存储的偏移量而产生的,并且没有超出这些偏移量的内容。
因此,Flink一次到位的保证需要可替换的资源。只有一次操作员之间的消息传递依赖于tcp。
要保证接收器不接收重复的结果,还需要事务接收器。flink提交事务作为检查点的一部分。