一、软件栈 Storage 层(存储层):Flink 本身并没有提供分布式文件系统,因此 Flink 的分析大多依赖于HDFS,也可以从 HBase 和 Amazon S3(亚马逊云存储服务)等持久……
一、软件栈
- Storage 层(存储层):Flink 本身并没有提供分布式文件系统,因此 Flink 的分析大多依赖于HDFS,也可以从 HBase 和 Amazon S3(亚马逊云存储服务)等持久层读取数据。
- Deploy 层(部署层): 该层主要涉及了 Flink 的部署模式,Flink 自带一个简易的资源调度器,称为独立调度器(Standalone)。若集群中没有任何资源管理器,则可以使用自带的独立调度器。当然,Flink 也支持在其他的集群管理器上运行,包括 Hadoop YARN,Apache Mesos,Kubernetes,GCE/EC2 等。
- Runtime 层(计算层):Runtime 层提供了支持 Flink 计算的全部核心实现,比如:支持分布式Stream 处理、JobGraph 到 ExecutionGraph 的映射、调度等等,为上层 API 层提供基础服务。
- API 层:主要实现了面向无界 Stream 的流处理和面向 Batch 的批处理 API,其中面向流处理对应DataStream API,面向批处理对应 DataSet API。
- Libraries 层(工具层):该层也可以称为 Flink 应用框架层,根据 API 层的划分,在 API 层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类:面向流处理支持:CEP(复杂事件处理库)、Table & SQL(结构化表处理库)和面向批处理支持:Table & SQL(结构化表处理库)、FlinkML(机器学习库)、Gelly(图计算库)。
提示:DataSet API 在 1.12.0 版本中被废弃(Apache Flink 1.12.0 – 2020-12-08),Flink 正式完成流批一体。
二、运行架构
Flink 运行时由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager。
Client 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 JobManager。之后,客户端可以断开连接(detached mode 分离模式),或保持连接来接收进程报告(attached mode 附加模式)。客户端可以作为触发执行 Java/Scala 程序的一部分运行,也可以在命令行进程 ./bin/flink run … 中运行。
可以通过多种方式启动 JobManager 和 TaskManager:直接在机器上作为 Standalone 集群启动、在容器中启动、或者通过 YARN 等资源框架管理并启动。TaskManager 连接到 JobManagers,宣
布自己可用,并被分配工作。
当 Flink 程序启动时,会启动一个 JobManager 和一个或多个 TaskManager。JobManager 的作用就好比 Spark 中的 ClusterManager 和 Driver,TaskManager 的作用就好比 Spark 中的
ClusterWorker 和 Executor。
简单的理解就是:用户通过 DataStream API、DataSet API、SQL 和 Table API 编写 Flink 应用程序,它会生成一个 JobGraph。JobGraph 是由 source、map()、keyBy()/window()/apply() 和 Sink 等算子组成的。当 JobGraph 提交给 Flink 集群后,能够以 Local、Standalone、Yarn 和 Kubernetes 四种模式运行。
还没有评论呢,快来抢沙发~