Apache Flink 通过从检查点恢复作业来保证在故障和恢复时只进行一次处理,检查点是分布式数据流和操作员状态的一致快照(分布式快照的 Chandy-Lamport 算法)。 这保证在故障转移时只发生一次。
在正常集群操作的情况下,Flink 如何保证只处理一次,例如给定一个从外部源(例如 Kafka)读取的 Flink 源,Flink 如何保证从源中读取一次事件?事件源和 Flink 源之间是否有任何类型的应用程序级别的确认?另外,Flink 如何保证事件从上游算子到下游算子只传播一次?这是否也需要对收到的事件进行任何类型的确认?