我正在使用 Apache Flink + RabbitMQ 堆栈。我知道有机会手动触发保存点并从中恢复作业,但问题是 Flink 在成功检查点后确认消息,如果您想创建保存点和恢复状态,您将丢失上次成功保存点和上次成功检查点之间的所有数据.有没有办法从检查点恢复工作?这将解决在不可重播数据源(如rabbitmq)的情况下丢失数据的问题。顺便说一句,如果我们有检查点及其所有开销,为什么不让用户使用它们?
最佳答案
从概念上讲,保存点只不过是一个检查点加上一些元数据。在两种情况下(Savepoint 和 Checkpoint),Flink 都会为所有算子、源和汇的状态创建一个一致的检查点。
检查点被认为是故障恢复的内部机制。但是,检查点可以是 configured to be externalized checkpoints 。外化检查点不会在作业终止时自动清除,可用于手动重新启动程序。
您对 RabbitMQ 源的问题是它有点违反了 Flink 的检查点语义,因为它通过对无法重置的检查点进行确认将某些状态推送到外部系统。
触发保存点并随后立即关闭作业的机制是否可以解决您的问题?这将防止在获取保存点后触发检查点。
关于rabbitmq - 从检查点恢复 Apache Flink 作业,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39472425/