Flink简介
大数据Flink从入门到实战
对课程大数据Flink从入门到实战中flink的介绍部分及《Flink原理、实战与性能优化》进行学习记录。
第一讲 Flink流处理简介
一.Flink是什么?
Flink是一个框架和分布式处理引擎,用于对*和有界数据流进行状态计算。
Flink是能够同时支持高吞吐、低延迟、高性能的分布式处理框架。
Flink是德语词,表示快速灵巧。
二.为什么选择Flink?
1)流数据更真实地反映了我们的生活方式
2)传统的数据架构是基于有限数据集的
3)我们的目标:低延迟、高吞吐、结果的准确性和良好的容错性
三.传统数据处理架构
1)事务处理
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
2)分析处理
将数据从业务数据库复制到数据仓库,再进行分析和查询。
四.流处理的演变
1.有状态的流式处理架构
在内存中计算数据能做到低延迟。
使用分布式架构能做到高吞吐。
在容错方面定期将数据备份。
2.lambda架构
用两套系统(流处理和批处理),同时保证低延迟和结果准确
lambda架构包括三层:
1)Batch layer
这层的功能主要有2点:
- 存储数据集
- 在数据集上预先计算查询函数,构建查询所对应的view
保存计算结果在view中,lambda可以通过view快速查询结果
2)Speed Layer
Speed Layer是用来处理增量的实时数据,对数据进行计算并生成Realtime View。
Speed Layer 与 Batch Layer 的区别:
- Speed Layer处理最近的增量数据流,Batch Layer处理的是过去一端时间的全体数据集。
- Speed Layer必须不断更新Realtime View,而Batch Layer根据离线数据集直接获得Batch View。
3)Serving Layer
这一层用于响应用户的查询请求,合并Batch View 和 Realtime View中的结果数据集到最终的数据集。
lambda存在的问题:框架太多会导致平台复杂度过高、运维成本高等。
3.Flink架构
1)Flink的主要特点
-事件驱动(Event-driven)
-基于流的世界观
-分层API
越顶层约抽象,表达含义越简明,使用越方便
越底层越具体,表达能力越丰富,使用越灵活
-支持事件时间(event-time)和处理时间(processing-time)语义
-精确一次(exactly-once)的状态一致性保证
-低延迟,每秒处理数百万个事件,毫秒级延迟
-与众多常用存储系统的连接
-高可用,动态扩展,实现7*24小时全天候运行
2)Flink基本组件栈
Flink的基本架构体系基本上可以分为三层,由上往下一次是API&Libraries层、Runtime层、以及物理部署层。
- API&Libraries层
作为分布式数据处理框架,Flink 同时提供了支撑流计算和批计算的接口,同时在此基础上抽象出不同的应用类型的组件库,如基于流处理的 CEP (复杂事件处理库),SQL & TABLE 库 和 基于批处理的 FlinkML(机器学习库),Gelly(图处理库)等。API 层包括构建流计算应用的 DataStream API 和批计算应用的 DataSet API,两者都是提供给用户丰富的数据处理高级 API,例如 Map,FlatMap 等,同时也提供比较低级的 Process Function API ,用户可以直接操作状态和时间等底层数据 - Runtime核心层
该层主要负责对上层不同接口提供基础服务,也是 Flink 分布式计算框架的核心实现层,支持分布式 Stream 作业的执行、JobGraph 到 ExecutionGraph 的映射转换、任务调度等。将 DataStream 和 DataSet 转成统一的可执行的 Task Operator,达到在流式引擎下同时处理批量计算和流式计算的目的 - 物理部署层
该层主要涉及 Flink 的部署模式,目前 Flink 支持多种部署模式:本地、集群(Standalone / YARN)、云(GCE / EC2)、kubenetes。flink 能够通过该层支持不同平台的部署,用户可以根据需要选择使用对应的部署模式。
3)基本架构图
Flink整个生态系统主要由两个组件组成,分别为JobManager和TaskManager,Flink架构也遵循Master-Slave架构设计原则,JobManager为Master节点,TaskManager为Worker(Slave)节点。所有组件之间的通信都是借助于Akka Framework,包括任务的状态以及checkpoint触发等信息。
(1)Client客户端
客户端负责将任务提交到集群,与JobManager构建Akka连接,然后将任务提交到JobManager,通过和JobManager之间进行交互获取任务执行状态。
(2)JobManager
JobManager负责整个Flink集群任务的调度以及资源的管理,从客户端中获取提交的应用,然后根据集群中TaskManager上TaskSlot的使用情况,为提交的应用分配相应的TaskSlots资源并命令TaskManager启动从客户端获取的应用。整个集群有且仅有一个活跃的JobManager,负责整个集群的任务管理和资源管理。
(3)TaskManager
TaskManager相当于整个集群的Slave节点,负责具体的任务执行和对应任务在每个节点上的资源申请与管理。
五.Flink vs Spark Straming
-
流(stream)和微批(micro-batching)
-
数据模型
- Spark采用RDD模型,spark streaming的DStreaming 实际上也就是一组组小批数据RDD的集合
- flink基本数据模型是数据流,以及事件(Event)序列
-
运行时架构
- Spark是批计算,将DAG划分为不同的stage,一个完成后才可以计算下一个
- flink是标准的流执行模式,一个事件在一个节点处理完后可以直接发往下一个节点进行处理