Flink是一个分层架构的系统,主要分为三层,每一层所包含的组件都提供了特定的抽象,用来服务上层组件。部署层面上,可以单机、集群、云上部署,一般YARN集群部署比较多。核心层面上,有一个分布式的流式数据处理引擎。API层面上,有流式处理API、批处理API。流式处理支持事件处理、表操作;批处理支持机器学习、图计算、也支持表操作。
Flink提供了三种部署方案local,Cluster,Cloud。即:本地部署,集群部署和云部署。
Runtime层是Flink流处理以及批处理时共用的一个引擎,以JobGraph形式接收程序。JobGraph即为一个一般化的并行数据流图(data flow),它拥有任意数量的Task来接收和产生data stream。
DataStream API和DataSet API都会使用单独编译的处理方式生成JobGraph。DataSet API使用Optimizer来决定针对程序的优化方法,而DataStream API则使用stream builder来完成该任务。
Table API是对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过SQL的DSL对关系表进行各种查询操作,支持Java和Scala。
Libraries层对应的是Flink不同的API对应的一些功能:处理逻辑表查询的Table,机器学习的FlinkML,图像处理的Gelly,复杂事件处理的CEP。