由于数据是连续的,流处理应用程序需要对流数据执行一系列聚合计算,例如统计过去一分钟内点击特定网页的用户数量。定义一个窗口来收集过去一分钟的数据并重新计算该窗口内的数据。 Flink 将窗口分为基于时间、计数、会话和数据驱动的窗口操作,允许用户定义不同的窗口触发机制以适应不同的需求,并使用灵活的触发条件。
基于轻量级、分布式的快照(snapshot),Flink 可以跨数千个节点分布式运行,将大型计算任务的进程拆分为更小的计算进程,并在并行节点上分布式运行测试并进行处理。任务执行过程中,自动检测导致数据不一致的事件处理错误,例如节点宕机、网络传输问题、用户升级或问题修复导致计算服务重启等。在这种情况下,基于分布式快照技术,通过检查点持久保存执行过程中的状态信息,当任务异常停止时,Flink会自动从检查点恢复任务并保证数据一致性。
基于JVM实现独立的内存管理内存管理是所有计算框架的重要考虑因素,尤其是在计算相对密集的计算场景中,数据在内存中的管理方式很重要。对于内存管理,Flink 实现了自己的内存管理机制,尽量减少JVM GC 对系统的影响。此外,Flink 使用序列化/反序列化方法将所有数据对象转换为二进制并存储在内存中,同时更好地利用内存空间并减少由于Masu 造成的性能下降。由于任务异常的风险,Flink 比其他分布式处理框架更加稳定,JVM GC 等问题不会影响应用程序的整体运行。
Save Points(保存点) 如果流式应用程序每天7*24 小时运行,在一定时间内终止应用程序可能会导致数据丢失或计算结果不准确,例如集群版本升级或关闭。维修工作及其他工作。 Flink 使用保存点技术将任务执行的快照保存到存储介质中。当任务恢复时,可以直接从之前保存的保存点恢复原始计算状态,因此任务继续运行。 Run、Save Points技术可以让用户更好地管理和操作实时流媒体应用程序。
1.3 Flink 应用场景
实时智能推荐、复杂事件处理、实时欺诈检测、实时数据仓储和ETL流数据分析、实时报表分析1.4 Flink 基础架构
1.4.1 基础组件栈图1-5 Flink 基础组件栈
Flink 分为三个架构层:从上到下:APILibraries 层、运行时核心层、物理部署层。
API库层
Flink作为分布式数据处理框架,还提供了支持计算和批量计算的接口。同时,它针对不同类型的应用程序抽象了组件库,例如基于流处理的复杂事件处理库(CEP)、SQLTable库和批处理。基础FlinkML(机器学习库)和Gelly(图处理库)等API层包括用于构建流计算应用程序的DataStream API和用于批量计算应用程序的DataSet API,这两者不仅为用户提供了丰富的高级数据处理API集,例如Map和FlatMap操作,但也提供了相对低级的功能。流程函数API,允许用户直接操作状态、时间等底层数据。
运行时核心层
该层主要负责向各种上层接口提供基础服务,例如Flink分布式计算框架,支持分布式流作业执行、JobGraph到ExecutionGraph的映射转换、任务调度等,也是.将DataSteam 和DataSet 转换为统一的、可执行的任务运算符,使用流引擎同时处理批处理和流计算。
物理部署层
这一层主要包含Flink的部署模式。 Flink 目前支持多种部署模式:本地、集群(单机、YARN)、云(GCE/EC2)、Kubenetes。 Flink 通过这一层可以支持各种平台的部署,用户可以根据自己的需求选择使用相应的部署模式。
1.4.2 基本架构图图1-6 Flink基本架构图
Flink系统由两个主要组件组成:JobManager和TaskManager。 Flink架构遵循主/从架构的设计原则。作业管理器是主节点,任务管理器是工作(从)节点。所有组件之间的通信通过Akka 框架进行,包括任务状态、检查点触发器和其他信息。
1. 客户客户
客户端负责向集群提交任务,与JobManager建立Akka连接,然后将任务提交给JobManager并与JobManager交互获取任务执行状态。客户端可以使用CLI 或Flink WebUI 提交任务。您还可以在应用程序中指定JobManager的RPC网络端口来构建用于发送Flink应用程序的ExecutionEnvironment。
2. 岗位经理
JobManager 负责跨Flink 集群任务的资源调度和管理,接受客户端提交的应用程序,并根据集群中TaskSlots 的使用情况分配与提交的应用程序对应的TaskSlots 资源。然后告诉任务管理器从客户端启动应用程序。作业管理器是集群范围内的主节点;整个集群中只有一个作业管理器处于活动状态,负责集群范围内的任务和资源管理。 JobManager和TaskManager通过Actor System进行通信,获取任务执行状态,并将应用程序任务执行状态通过Actor System发送给客户端。同时,在任务执行过程中,Flink JobManager 会触发检查点操作。一旦各个任务管理器节点收到检查点触发指令,Flink JobManager 中的所有检查点协调过程就完成了。当一个任务完成后,Flink 会向客户端反馈任务执行信息,并释放任务管理器中的资源以供下一个提交的任务使用。
3.任务管理器
TaskManager代表集群范围内的从节点,负责执行特定任务、申请资源以及管理各个节点上相应的任务。客户端将创建的Flink应用程序编译打包并发送给作业管理器。然后Job Manager根据注册到Job Manager的Task Manager资源将任务分配给Task Manager节点,并启动并执行任务。任务。 TaskManager接收JobManager发送的需要部署的任务,使用Slot资源启动任务,建立数据访问的网络连接,接收数据并开始数据处理。同时,任务管理器之间的数据交互是通过数据流进行的。
可以看到Flink实际上是采用多线程的方式来执行任务的。这与MapReduce 多JVM 进程方法有很大不同,Flink 显着提高了CPU 利用率,并且可以通过TaskSlot 系统在多个任务之间共享。为了高效管理资源,每个TaskManager管理多个TaskSlot资源池。
本文由博客发布平台OpenWrite 发布。
版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。