我知道Flink使用检查点机制来保证完全一次。但是我想知道更多细节。
[如果我没错,每个操作员都有自己的检查点。我不明白这些检查点如何协同工作。
说我有两个源任务A和B,以及一个运算符C。A和B是C的输入。
似乎C必须同时等待A和B的检查点。但是,我们如何确定它们的间隔?如果C的运算符这样做:output = a1 + a2 + a3 - b1
,是否意味着我们应该将B的检查点的间隔设置为A的检查点的三倍?
总之,我的问题是是否应该根据每个操作员的检查点间隔和其输入频率来进行一些设计,以避免长时间等待检查点问题?
我不确定是否遵循您的问题。您可以为整个作业设置检查点间隔,而不是基于每个操作员。这确定了检查点屏障将在源处注入流中的时间间隔。然后它遍历与常规事件相同的通道。在接收到检查点屏障后,单个操作员会检查与该特定检查点相对应的状态(每个检查点屏障都包含检查点ID)。这样,整个作业可以在流中的该点为所有操作员创建一致的快照。
如果您想更详尽地解释它是如何工作的,请看这里:Data Streaming Fault Tolerance