我有一个带有接收器的Flink作业,它将数据写入MongoDB。接收器是RichSinkFunction
的实现。
启用外部化检查点。间隔为5000毫克,方案为EXACTLY_ONCE。
我无法升级到Flink 1.4的TwoPhaseCommitSink
。
我很怀疑
答案 0 :(得分:3)
首先,如果源和接收器支持这一点,Flink只能保证端到端的一次性一致性。如果您正在使用Flink的Kafka使用者,Flink可以保证应用程序的内部状态完全一致。为了实现完全端到端的完全一致性,接收器也需要适当支持。如果MongoDB接收器工作正常,您应该检查它的实现。
检查点障碍通过数据传输通道发送常规消息,即检查点n
的障碍将流分为进入检查点n
和n + 1
的记录。接收器操作员将处理两个invoke()
调用之间的屏障,并触发状态后端以执行检查点。然后由状态后端决定是否以及如何异步执行检查点。一旦触发检查点的调用返回,接收器就可以继续处理。接收器操作员将向JobManager报告,一旦状态后端通知,它就完成了检查点状态。当所有操作员成功报告他们完成了检查点时,整个检查点就完成了。
此blog post更详细地讨论了端到端的一次性处理和接收器运算符的要求。