flink原理简介

一、Flink是什么?
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。此外,Flink的运行时本身也支持迭代算法的执行。
二、Flink的优点:
(1)同时支持高吞吐、低延迟、高性能; Flink 是目前唯一能同时集高吞吐、低延迟、高性能三者于一身的分布式流式数据处理框架。Apache Spark 只有高吞吐、高性能。因为SparkStream 做不到低延迟,本质还是微批处理。Apache Storm 只有低延迟、高性能,但达不到高吞吐。
(2)支持事件事件(Event Time)概念
(3)支持有状态计算
(4)支持高度灵活的窗口(Window)操作
(5)基于轻量级分布式快照实现的容错
(6)基于JVM实现独立的内存管理
(7)Save Points的实现

三、Flink应用场景
(1)实时推荐
(2)复杂事件处理
(3)实时欺诈检测
(4)实时数仓与ETL
(5)流数据分析
(6)实时报表分析
四、Flink 基本架构
1、基本组件栈
在这里插入图片描述
Flink的架构体系同样也遵行分层架构设计的理念,基本上分为三层,API&Libraries层、Runtine核心层以及物理部署层。 API&Libraries层:提供了支撑流计算和批计算的接口,同时在此基础之上抽象出不同的应用类型的组件库。 Runtime 核心层:负责对上层不同接口提供基础服务,支持分布式Stream作业的执行、JobGraph到ExecutionGraph 的映射转换、任务调度等,将DataStream和DataSet转成统一的可执行的Task Operator. 物理部署层:Flink 支持多种部署模式,本机,集群(Standalone/YARN)、云(GCE/EC2)、Kubenetes。
2、基本架构图
在这里插入图片描述
Flink系统由两个部分组成,分别是JobManager和TaskManager,Flink架构也遵行Master-Slave架构设计原则,JobManager是Master节点,TaskManager是Worker(Slave)节点。所有组件之间需要借助Akka Framework 来通讯,包括任务的状态和checkpoint触发等信息。
(1)client 客户端 客户端负责将任务提交到集群,与Jobmanager构建Akka连接,然后将任务提交到jobmanager,通过jobmanager之间进行交互获取任务执行状态。客户端提交任务可以cli方式或者通过使用Flink WebUI 提交。
(2)Jobmanager jobmanager 负责整个Flink集群任务的调度以及资源的管理,从客户端获取提交的任务,然后根据集群中Taskmanager 上TaskSlot的使用情况,为提交的应用分配相应的TaskSlot资源并命令Taskmanager 启动从客户端中获取的应用。Jobmanager 是集群中的Master节点,整个集群有且仅有一个active的jobmanager,负责整个集群的任务管理和资源管理。Jobmanager和TaskManager之间通过Actor System 进行通信,获取任务的执行情况并通过Actor System 将应用的任务的执行情况发送到客户端。同时在任务的执行过程中,Flink Jobmanager 会触发Checkpoints 操作,每个taskmanager 节点接受的到checkpoints触发命令后,完成checkpoints操作,所有的checkpoint协调过程都是在Flink Jobmanager中完成。当任务完成后,jobmanager会将任务执行信息返回到客户端,并释放掉taskmanager中的资源以供下一次任务使用。
(3)Taskmanager Taskmanager 相当于整个集群的slave 节点,负责具体的任务执行和对应任务在每个节点上的资源申请与管理。客户端通过将编写好的flink应用编译打包,提交到jobmanager,然后jobmanager会根据已经注册在jobmanger中taskmanager的资源情况,将任务分配到有资源的taskmanager节点,然后启动并运行任务。Taskmanager从jobmanager那接受需要部署的任务,然后使用slot资源启动task,建立数据接入网络连接,接受数据并处理。同时Taskmanager之间的数据交互都是通过数据流的方式进行的。
flink的任务运行其实是采用多线程的方式,能够极大的提高cpu使用效率,在多个任务之间通过taskslot方式共享系统资源,每个taskmanager对多个taskslot资源池进行管理。

发布了117 篇原创文章 · 获赞 18 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/WangYouJin321/article/details/104009180