Apache flink 快照机制是否会在ApacheFlink中花费越来越多的内存

Apache flink 快照机制是否会在ApacheFlink中花费越来越多的内存,apache-flink,flink-streaming,snapshot,fault-tolerance,Apache Flink,Flink Streaming,Snapshot,Fault Tolerance,我正在学习Flink中快照机制的工作原理 据我所知,JobManager将以固定的时间间隔将屏障插入每个数据源,每个操作员从其所有数据源接收到第n个屏障后,将进行快照 如果我是对的,这种机制在某些情况下可能会使用越来越多的记忆 以下是一个例子: 表示有两个数据源:源1和源2,以及一个运算符 Source 1 -----\ ------ Operator Source 2 -----/ 源1正在生成整数流:1、2、3、4、5 源2正在生成字符流:a、b、c、d、e

我正在学习Flink中快照机制的工作原理

据我所知,JobManager将以固定的时间间隔将屏障插入每个数据源,每个操作员从其所有数据源接收到第n个屏障后,将进行快照

如果我是对的,这种机制在某些情况下可能会使用越来越多的记忆

以下是一个例子:

表示有两个数据源:源1和源2,以及一个运算符

Source 1 -----\
               ------ Operator
Source 2 -----/
源1正在生成整数流:1、2、3、4、5

源2正在生成字符流:a、b、c、d、e

运算符执行此操作:它从源1获取两个输入,从源2获取一个输入,以生成输出:1a2、3b4、5c6、7d8

假设JobManager将屏障插入两个数据源,如下所示:

1, BARRIER A, 2, BARRIER B, 3, BARRIER C, 4, BARRIER D, 5...
a, BARRIER A, b, BARRIER B, c, BARRIER C, d, BARRIER D, 5...
现在让我们开始

当源1和源2的两个屏障A进入操作员时,Flink将为操作员制作快照,其当前状态为1和A,因为当屏障A进入操作员时,1和A已在操作员中

Source 1 -----\
               ------ Operator
Source 2 -----/
然后,当两个屏障B进入操作员时,操作员已完成其第一个任务:生成1a2,Flink将生成另一个快照:NA,B。NA表示当前没有来自源1的新输入

同时,每个快照将存储到RAM、FS或RocksDB中,具体取决于我们配置Flink的方式

如果我是对的,我认为在这个例子中Flink会生成越来越多的快照。因为源1的消耗速度始终是源2的两倍


我误解了什么吗?

有趣的思维实验

如果您将自己限制为仅使用Flink API的标准部分,则无法实现一个用户函数,该函数将针对从源2读取的每个输入从源1读取两个输入。例如,在实现协处理器函数时,您将受Flink运行时的支配,它将根据自身的内部逻辑从任一流提供事件。这两个流将相互竞争,可能在不同的线程中运行,甚至在不同的进程中运行。当流聚合时,如果来自两个输入的事件没有按照您希望的顺序提供,则必须在Flink状态下缓冲它们,直到您准备好处理它们为止

这可能导致大量缓冲需求的常见情况是,在实施事件时间连接时,其中一个流在时间戳方面远远领先于另一个流,例如,使用交易时有效的汇率,以外汇率连接金融交易,如果汇率流落后。但是这种缓冲可以在RocksDB中完成,并且不必对内存施加压力

请注意,这种状态缓冲完全发生在您的应用程序中-Flink没有在背压期间可以膨胀的灵活网络缓冲区

另一点是快照从不存储在本地文件系统或RocksDB中。如果选择使用RocksDB状态后端,则每个任务管理器的活动工作状态将存储在本地RocksDB实例中,但快照的状态备份将存储在分布式文件系统中

至于你这样描述的情况,

1, BARRIER A, 2, BARRIER B, 3, BARRIER C, 4, BARRIER D, 5...
a, BARRIER A, b, BARRIER B, c, BARRIER C, d, BARRIER D, 5...
这是不会发生的。没有什么能安排这两个源以这种方式同步——它们将比这张图所示的更加独立地进行。由于Flink在管道级之间只有少量固定数量的网络缓冲,因此执行图中出现的任何背压都将迅速传播回一个或两个源。当这种情况发生时,背压源将无法将任何事件推入管道,直到背压缓解-但与此同时,另一个源可能会继续取得进展。屏障将由两个源在大致相同的时间独立插入两个流中,但如果源2遇到频繁的背压,它可能看起来更像这样:

1, BARRIER, A, 2, B, 3, BARRIER, C, 4, D, BARRIER, 5 ...
a, BARRIER, A, BARRIER, b, B, BARRIER, BARRIER, c ...