从另外一个有趣的角度来分析 Flink,也就是将 Flink 视为一个分布式的 JVM。

冯诺依曼结构计算机

要说分布式的 JVM,得先从单节点的 JVM(Java 虚拟机)说起。单节点的 JVM,说白了就是一个冯诺依曼结构的计算机,也就是下面图 1 所示的系统。
image.png
在冯诺依曼结构计算机中,CPU 在进行计算时,最主要的数据交互对象是内存,而磁盘在其中的作用只是进行数据的持久化存储。

分布式的JVM

image.png
在 Flink 作业的计算过程中,每个 Flink 计算节点(说得更具体点就是执行计算任务的线程)最主要的数据交互对象是状态后端。这和冯诺依曼结构计算机中,CPU 最主要的数据交互对象是内存的情况,是完全对应的!

而且,Flink 在处理完数据后,结果是通过输出流再保存到数据库。这与冯诺依曼结构计算机中,计算完成后结果经过输出设备驱动保存到磁盘的过程,也是完全相似的!

如果我们将 Flink 集群整体视为一个冯诺伊曼结构计算机的话,那么Flink 的计算节点(说得更具体点就是执行计算任务的线程)就对应着 CPU,而 Flink 计算节点上的状态后端就对应着内存,输入、输出流就对应着 I/O 设备了。

这样的话,Flink 就成了一个CPU 和内存都可以近乎无限扩展的冯诺依曼机器。