我正在使用Apache Flink + RabbitMQ技术栈。我了解手动触发保存点并从中恢复作业的机会,但问题是Flink在成功检查点后才确认消息,如果要进行保存点并还原状态,则会丢失最后一个成功保存点和检查点之间的所有数据。是否有一种方法可以从检查点中恢复作业?这将解决在不可重放数据源(如rabbitmq)的情况下丢失数据的问题。顺便说一句,如果我们已经具备了所有的检查点开销,为什么不允许用户使用它们呢?
从概念上讲,保存点除了一些元数据外,与检查点没有什么不同。在两种情况下(保存点和检查点),Flink创建了所有运算符、源和接收器状态的一致检查点。
检查点被认为是一种内部机制,用于故障恢复。但是,检查点可以配置为外部化检查点。外部化检查点在作业终止时不会自动清除,并且可以用于手动重新启动程序。
您在RabbitMQ源中遇到的问题是它违反了Flink的检查点语义,因为它通过确认检查点将一些状态推送到外部系统,而这些状态无法重置。
如果有一种机制可以触发保存点并立即关闭作业以解决您的问题,那会怎样?这将防止在获取保存点后触发检查点。