我有 Flink 流处理应用程序,它从 Pulsar Topic 读取消息流,处理它们并将文件存储在 S3 中。它执行以下操作。
快乐之路效果很好。问题始于部分故障和恢复。
步骤#2 可以创建多个不同的流,因为流中会有不同的密钥。
检查点 1 已触发。 流 1(密钥 1)——处理成功。 流 2(关键 2)——由于某种原因,上述步骤 3 或 4 的处理失败。 检查点 2 已完成。
如果我抛出异常,万一流 2 失败,整个作业将会失败并从检查点 1 重新处理。在这种情况下,流 1 将被重新处理,这是不应该发生的。
Flink 有没有一种方法可以手动避免仅针对失败的消息确认 Pulsar 主题或仅在重启后处理失败的记录。我的要求是不进行重复处理,只重新处理失败的记录。
我读到保存点可以是解决方案之一,但没有找到任何具体的例子。
感谢您的帮助!
简短的回答是“不”。 Flink 跟踪源偏移量和接收器事务(加上算子状态),以支持高效的恰好一次处理。