Flink架构原理

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 笔记

(1)Flink应用场景


实际生产的场景,如金融交易数据、互联网订单数据、GPS定位数据、传感器信号、启动终端生产的数据、通讯信号数据等,以及我们熟悉的网络流量监控、服务器产生的日志数据,这些数据最大的共同点就是实时从不同的数据源产生,然后在传输到下游的分析系统。针对这些数据类型主要包括:


实时智能推算

智能推算会根据用户历史的购买行为,通过推荐算法训练模型,预测用户未来可能会购买的物品。


复杂事件处理

对于复杂事件处理,比较常见的案例主要集中在工业领域,例如对车载传感器、机械设备等实时检测,这些业务类型通常数据量都非常大,且对数据处理的时效性要求非常高。通过利用Flink提供的CEP (复杂事件处理)进行事情模式的抽取,同时应用Flink的SQL进行事件数据的转换,在流式系统构建实时规则引擎,一旦事件触发报警规则,便立即将告警结果传输至下游通知系统,从而实现对设备故障快速预警监测,车辆状态监控等。


实时欺诈检测

在金融领域的业务中,尝尝出现各种类型的欺诈行为,例如信用卡欺诈、信贷申请欺诈等。我们可以运用Flink流式计算能够在毫秒内就完成对欺诈判断行为指标的计算,然后实时对交易流水进行规则判断或者模型预测,这样一旦检测出交易存在欺诈嫌疑,则直接对交易进行实时拦截。


实时数据仓库与ETL

结合离线数据仓库,通过利用流计算的优势,补充和优化离线数据仓库。通过有状态的流式计算,高效快速的处理企业需要的统计结果。


流数据分析

实时计算各类数据指标,并利用实时结果及时调整在线系统相关策略,在各类内容投放、无线智能推送领域有大量的应用。


(2)Flink组件架构


1.png

API&Libraries层


作为分布式数据处理框架,Flink同时提供了支撑流计算和批计算的接口,同时在此基础上抽象出不同的应用类型的组件库,如基于流处理的CEP (复杂事件处理库)、SQL&Table库和基于批处理的FlinkML (机器学习库)、Gelly (图形处理库)。API层包括构建流计算应用的DataStream API和批计算应用的DataSet API,两者都提供给用户丰富的数据处理高级API,例如Map、FlatMap操作等,同时也提供比较低级的ProcessFunction API,用户可以直接操作状态和时间等底层数据。


核心层

该层主要负责对上层不同接口提供基础服务,也是F1ink分布式计算框架的核心实现层,支持分布式 Stream作业的执行、JobGraphExecutionGraph到的映射转换、任务调度等。将DataStreamDataSet和转成统一的可执行的 Operator,达到在流式引擎下同时处理批量计算和流式计算的目的。


物理部署层

目前Flink支持多种模式:本地、集群(Standalone/YARN)、云(GCE谷歌/EC2亚马逊)、Kubenetes。


(3)Flink系统架构


Flink 运行时由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager。 Flink框架也遵循Master 一 Slave加过设计原则,JobManager为Master节点,TaskManager为Work (salve)节点。所有组件之间的通讯都是借助于Akka框架,包括任务的状态以及Checkpoint触发信息。

2.png


(3.1)Client客户端

Client 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 JobManager。之后,客户端可以断开连接(分离模式),或保持连接来接收进程报告(附加模式)。客户端可以作为触发执行 Java/Scala 程序的一部分运行,也可以在命令行进程./bin/flink run …中运行。


可以通过多种方式启动 JobManager 和 TaskManager:直接在机器上作为standalone 集群启动、在容器中启动、或者通过YARN或Mesos等资源框架管理并启动。TaskManager 连接到 JobManagers,宣布自己可用,并被分配工作。


客户端负责将任务提交到集群,与 JobManager构建Akka连接,然后任务提交到 JobManager,通过和 JobManager之间进行交互获取任务执行状态。客户端提交任务可以采用CLI方式或者 Flink通过使用 WebuI提交,也可以在应用程序中指定 JobManager的RPC网络端 ExecutionEnvironmentFlink口构建提交应用。


(3.2)JobManager

JobManager负责整个Flink集群任务的调度以及资源管理,从客户端中获取提交的应用,然后根据集群中TaskManager上TaskSlot的使用情况,为提交的应用分配相应的TaskSlots资源并命令TaskManager启动从客户端中获取的应用。JobManager相当于整个集群的Master节点,且整个集群中有且仅有一个活跃的JobManager,负责整个集群的任务管理和资源管理。JobManager和TaskManager之间通过Actor System进行通信,获取任务执行的情况并通过Actor System将应用的任务执行情况发送给客户端。同时在任务执行过程中,Flink JobManager会触发Checkpoint操作,每个TaskManager节点收到Checkpoint触发指令后,完成Checkpoint操作,所有的Checkpoint协调过程都是在Flink JobManager中完成。当任务完成后,Flink会将任务执行的信息反馈给客户端,并释放掉TaskManager中的资源供下次提交任务的使用。


JobManager 具有许多与协调 Flink 应用程序的分布式执行有关的职责:它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:


ResourceManager

ResourceManager 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的单位(请参考TaskManagers)。Flink 为不同的环境和资源提供者(例如 YARN、Mesos、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。


Dispatcher

Dispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。


JobMaster

JobMaster 负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。


始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby(请参考 高可用(HA))。


(3.3)TaskManager

TaskManager相当于整个集群的Slave节点,负责具体的任务执行和对应任务在每个节点上的资源申请与管理。客户端通过将编写好的Flink应用编译打包,提交到JobManager,然后JobManager会根据已经注册在JobManager中的TaskManager的资源情况,将任务分配给有资源的TaskManager节点,然后启动并运行任务。TaskManager从JobManager接受需要部署的任务,然后使用Slot资源启动Task,建立数据接入的网路连接,接受数据并开始数据处理。同时TaskManager之间的数据交互都是通过数据流的方式进行的。


TaskManager(也称为 worker)执行作业流的 task,并且缓存和交换数据流。


必须始终至少有一个 TaskManager。在 TaskManager 中资源调度的最小单位是 task slot。TaskManager 中 task slot 的数量表示并发处理 task 的数量。请注意一个 task slot 中可以执行多个算子(请参考Tasks 和算子链)。


(4)Tasks 和算子链


对于分布式执行,Flink 将算子的 subtasks 链接成 tasks。每个 task 由一个线程执行。将算子链接成 task 是个有用的优化:它减少线程间切换、缓冲的开销,并且减少延迟的同时增加整体吞吐量。链行为是可以配置的;


下图中样例数据流用 5 个 subtask 执行,因此有 5 个并行线程。

3.png


(5)Task Slots 和资源


每个 worker(TaskManager)都是一个 JVM 进程,可以在单独的线程中执行一个或多个 subtask。为了控制一个 TaskManager 中接受多少个 task,就有了所谓的 task slots(至少一个)。


每个 task slot 代表 TaskManager 中资源的固定子集。例如,具有 3 个 slot 的 TaskManager,会将其托管内存 1/3 用于每个 slot。分配资源意味着 subtask 不会与其他作业的 subtask 竞争托管内存,而是具有一定数量的保留托管内存。注意此处不涉及 CPU ;当前 slot 仅分离 task 的托管内存。


通过调整 task slot 的数量,用户可以定义 subtask 如何互相隔离。每个 TaskManager 有一个 slot,这意味着每个 task 组都在单独的 JVM 中运行(例如,可以在单独的容器中启动)。具有多个 slot 意味着更多 subtask 共享同一 JVM。同一 JVM 中的 task 共享 TCP 连接(通过多路复用)和心跳信息。它们还可以共享数据集和数据结构,从而减少了每个 task 的开销。

4.png

默认情况下,Flink 允许 subtask 共享 slot,即便它们是不同的 task 的 subtask,只要是来自于同一作业即可。结果就是一个 slot 可以持有整个作业管道。允许 slot 共享有两个主要优点:


Flink集群中的任务所需Slot数可以与任务设置的并行度相同。

提高资源利用率。通过slot共享,我们示例中的基本并行度从2增加到6,充分利用slot资源,同时确保Sub Task在TaskManager之间公平分配。

5.png

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
1月前
|
存储 搜索推荐 数据挖掘
ElasticSearch架构介绍及原理解析
ElasticSearch架构介绍及原理解析
92 0
|
1月前
|
存储 运维 负载均衡
MFS详解(二)——MFS原理和架构
MFS详解(二)——MFS原理和架构
30 0
|
2月前
|
架构师 安全 Java
资深架构师带你解析Synchronize关键字原理
众所周知 Synchronize 关键字是解决并发问题常用解决方案,有以下三种使用方式:
26 0
|
2月前
|
Java 流计算
【极数系列】Flink搭建入门项目Demo & 秒懂Flink开发运行原理(05)
【极数系列】Flink搭建入门项目Demo & 秒懂Flink开发运行原理(05)
|
1月前
|
存储 缓存 运维
ISCSI详解(三)——ISCSI原理和架构
ISCSI详解(三)——ISCSI原理和架构
44 2
|
21天前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
23 0
|
5天前
|
运维 监控 Java
面经:Storm实时计算框架原理与应用场景
【4月更文挑战第11天】本文是关于Apache Storm实时流处理框架的面试攻略和核心原理解析。文章分享了面试常见主题,包括Storm的架构与核心概念(如Spout、Bolt、Topology、Tuple和Ack机制),编程模型与API,部署与运维,以及应用场景与最佳实践。通过代码示例展示了如何构建一个简单的WordCountTopology,强调理解和运用Storm的关键知识点对于面试和实际工作的重要性。
18 4
面经:Storm实时计算框架原理与应用场景
|
7天前
|
机器学习/深度学习 分布式计算 BI
Flink实时流处理框架原理与应用:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Flink实时流处理框架的原理,包括运行时架构、数据流模型、状态管理和容错机制、资源调度与优化以及与外部系统的集成。此外,还介绍了Flink在实时数据管道、分析、数仓与BI、机器学习等领域的应用实践。同时,文章提供了面试经验与常见问题解析,如Flink与其他系统的对比、实际项目挑战及解决方案,并展望了Flink的未来发展趋势。附带Java DataStream API代码样例,为学习和面试准备提供了实用素材。
26 0
|
21天前
|
存储 Java 应用服务中间件
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
42 0
|
1月前
|
SQL 缓存 分布式计算
flink1.18 SqlGateway 的使用和原理分析
# 了解flink1.18 sqlGateway 的安装和使用步骤 # 启动sqlgateway 流程,了解核心的结构 # sql提交流程,了解sql 的流转逻辑 # select 查询的ResultSet的对接流程,了解数据的返回和获取逻辑

热门文章

最新文章