Flink 基本介绍及框架原理

Flink 官网文档:https://ci.apache.org/projects/flink/flink-docs-release-1.8/

一、Flink是什么?       

Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用JavaScala编写的分布式流数据流引擎。Flink数据并行流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。此外,Flink的运行时本身也支持迭代算法的执行。

二、Flink的优点:

   1)同时支持高吞吐、低延迟、高性能;

            Flink 是目前唯一能同时集高吞吐、低延迟、高性能三者于一身的分布式流式数据处理框架。Apache Spark 只有高吞吐、高性能。因为SparkStream 做不到低延迟,本质还是微批处理。Apache Storm 只有低延迟、高性能,但达不到高吞吐。

    2)支持事件事件(Event Time)概念

    3)支持有状态计算

    4)支持高度灵活的窗口(Window)操作

    5)基于轻量级分布式快照实现的容错

    6)基于JVM实现独立的内存管理

    7Save Points的实现

三、Flink应用场景

    1)实时推荐

    2)复杂事件处理

    3)实时欺诈检测

    4)实时数仓与ETL

    5)流数据分析

    6)实时报表分析
 

四、Flink 基本架构

    1、基本组件栈
 

Flink 基本介绍及框架原理

     Flink的架构体系同样也遵行分层架构设计的理念,基本上分为三层,API&Libraries层、Runtine核心层以及物理部署层。

    API&Libraries层:提供了支撑流计算和批计算的接口,同时在此基础之上抽象出不同的应用类型的组件库。

    Runtime 核心层:负责对上层不同接口提供基础服务,支持分布式Stream作业的执行、JobGraphExecutionGraph 的映射转换、任务调度等,将DataStreamDataSet转成统一的可执行的Task Operator.

    物理部署层:Flink 支持多种部署模式,本机,集群(Standalone/YARN)、云(GCE/EC2)、Kubenetes
 

    2、基本架构图
 

Flink 基本介绍及框架原理

Flink系统由两个部分组成,分别是JobManagerTaskManager,Flink架构也遵行Master-Slave架构设计原则,JobManagerMaster节点,TaskManagerWorker(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资源池进行管理。

博主个人微信公众号,不定期发布技术文章,喜欢的可以关注一下哈

Flink 基本介绍及框架原理