Flink原理与实践全套教学课件.pptx
- 文档编号:30801048
- 上传时间:2023-11-08
- 格式:PPTX
- 页数:279
- 大小:7.48MB
Flink原理与实践全套教学课件.pptx
《Flink原理与实践全套教学课件.pptx》由会员分享,可在线阅读,更多相关《Flink原理与实践全套教学课件.pptx(279页珍藏版)》请在冰豆网上搜索。
第一章大数据技术概述,全套课件,大数据的5个VVolume:
数据量大Velocity:
数据产生速度快Variety:
数据类型繁多Veracity:
数据真实性Value:
数据价值,大数据,单台计算机无法处理所有数据,使用多台计算机组成集群,进行分布式计算。
分而治之:
将原始问题分解为多个子问题多个子问题分别在多台计算机上求解将子结果汇总比较经典的模式和框架:
MPIMapReduce,大数据分而治之,MPI:
MessagePassingInterface消息传递接口使用分治法将问题分解成子问题,在不同节点上分而治之地求解。
MPI提供数据发送和数据接收操作:
将本进程中某些数据发送给其他进程接收其他进程的数据自行设计分治算法,将复杂问题分解为子问题优势:
以很细的粒度控制数据的通信劣势:
难度大,开发调试时间成本高,MPI,程序员只需要定义两个操作:
Map和Reduce案例:
三明治制作Map阶段将原材料在不同的节点上分别进行处理Shuffle/Group阶段将不同的中间食材进行组合Reduce阶段最终将一组中间食材组合成三明治成品学习门槛比MPI低,MapReduce,单条数据被称为事件(Event)或者被称为一条数据或一个元素。
事件按照时序排列会形成一个数据流(DataStream)。
数据流一般是无界(Unbounded)的,某段有界数据流(BoundedDataStream)可以组成一个数据集。
数据与数据流,批处理(BatchProcessing):
对一批数据进行处理案例:
微信运动统计步数,银行信用卡账单统计数据总量大,计算非常耗时流处理数据本质上是流,流处理(StreamProcessing)对数据流进行处理案例:
查看电商实时销售业绩、股票交易,批处理与流处理,流处理一般使用生产者-消费者模型股票交易案例:
辅助人工决策实现消费者侧代码,以10秒为一个时间窗口,统计窗口内的交易情况可扩展性:
随着数据不断增多,能否保证我们的程序能够快速扩展到更多的节点上。
数据倾斜:
数据没有均匀分布到分布式系统各个节点上。
容错性:
系统崩溃重启后,之前的那些计算如何恢复。
时序错乱:
数据到达的时间和实际发生的时间是不一致的,有一定的延迟,需要设计等待策略。
Flink:
为流处理而生。
流处理框架必要性,生产者-消费者模型,MapReduce编程模型的一种实现,逐渐形成了一整套生态圈。
主要组件:
HadoopMapReduce:
数据处理模型,面向批处理。
HDFS:
分布式文件系统,提供存储支持。
YARN:
资源调度器,分配计算资源。
其他著名组件:
Hive:
SQL-on-HadoopHbase:
基于HDFS的分布式数据库,毫秒级实时查询Kafka:
消息队列,ZooKeeper:
分布式环境的协调,Hadoop,Hadoop生态圈,Spark初衷:
改良HadoopMapReduce的编程模型,提高运行速度,优化机器学习性能。
易用性:
比MapReduce更好用,提供了多种编程语言API,支持SQL、机器学习和图计算。
速度快:
尽量将计算放在内存中。
完美融入进Hadoop生态圈。
流处理:
SparkStreaming,mini-batch思想,将输入数据流拆分成多个批次。
Spark是一个批流一体的计算框架。
Spark,Spark生态圈,Sparkmini-batch流处理,消息队列:
数据集成和系统解耦,某个应用系统专注于一个目标。
企业将各个子系统独立出来,子系统之间通过消息队列来发送数据。
Kafka,Kafka可以连接多个组件和系统,主要面向流处理流处理框架经历了三代演进StormSparkStreamingFlink事件投递保障:
Exactly-Once:
一条数据只影响一次最终结果毫秒级的延迟,Flink,Lambda架构:
批处理层、流处理层、在线服务层批处理层:
等待一个批次数据,使用批处理框架计算,得到一个非实时的结果。
比如,凌晨0点开始统计前一天所有商品的计算次数,计算需要几个小时。
流处理层:
使用流处理框架生层结果。
早期的流处理框架不成熟,结果近似准确。
在线服务层:
将来自批处理层准确但有延迟的预处理结果和流处理层实时但不够准确的预处理结果做融合。
程序员需要维护批处理和流处理两套业务逻辑。
Lambda架构,Lambda架构,Kafka等消息队列可以保存更长时间的历史数据,它不仅起到消息队列的作用,也可以存储数据,替代数据仓库。
Flink流处理框架解决了事件乱序下计算结果的准确性问题。
程序员只维护一套流处理层,维护成本低。
Kappa架构,Kappa架构,延迟和吞吐,延迟:
一个事件被系统处理的总时间。
案例:
自助食堂,一位用餐者从进入食堂到离开食堂的总耗时。
高峰时,总耗时会增加。
分位延迟更能反映系统的性能。
吞吐:
系统最大能处理多少事件。
与系统本身设计有关,也与数据源的数据量有关。
延迟与吞吐相互影响,一起反映了系统的性能。
优化方式:
优化单节点内的计算速度,使用并行策略,分而治之地处理数据。
延迟和吞吐更直观的表现:
用户是否排队。
滚动窗口(TumblingWindow):
定义一个固定的窗口长度,长度是一个时间间隔。
滑动窗口(SlidingWindow):
定义一个固定的窗口长度和一个滑动长度。
会话窗口(SessionWindow):
窗口长度不固定,根据会话间隔(SessionGap)确定窗口,两个事件之间的间隔大于SessionGap,则两个事件被划分到不同的窗口中。
窗口,三种时间窗口,EventTime:
事件实际发生的时间事件发生时,EventTime就已经确定ProcessingTime:
事件被流处理框架处理的时间不同节点、系统内不同模块、同一数据不同次处理都会产生不同的ProcessingTime案例:
手机游戏,用户需要与服务器实时交互,游戏根据实时数据计分。
信号丢失,部分数据上传有延迟,使用事件的EventTime更准确。
时间,Watermark是插入到数据流的元素。
Watermark元素到达,假设不会有比这个时间点更晚的上报数据。
可以设置不同的Watermark策略,是一种折中方案:
Watermark等待时间短,保证低延迟,数据准确性下降。
Watermark等待时间长,数据更准确,延迟高,维护难度大。
Watermark,无状态:
流处理中,不需要额外信息,给定一个输入数据,直接得到输出。
将英文单词转化为小写。
有状态:
根据历史信息,处理新流入数据。
统计一分钟内单词出现次数,需要保存已经进入系统的历史。
使用检查点(Checkpoint)技术,将状态数据保存下来,用于故障后的恢复。
状态与检查点,有状态计算和无状态计算,如果发生故障,数据是否被成功处理?
At-Most-Once:
每个事件最多被处理一次。
有些数据被丢弃,最不安全。
At-Least-Once:
每个事件至少被处理一次,有些事件可能被处理多次。
部分数据被处理多次,可能不准确。
Exactly-Once:
每个事件只被处理一次。
事件不丢不重。
实现难度最大。
数据一致性保障,Java企业级编程语言有很多开源包大数据必备Scala函数式编程有一定学习门槛Flink目前绝大多数代码和功能均由Java实现,编程语言的选择,Python简单易用PyFlinkSQL上手门槛很低,第二章大数据必备编程知识,案例:
动物类(Animal)和鱼类(Fish)继承关系保证所有动物子类都具有动物类的属性和方法子类有自己的属性和方法。
除了动物,还有很多其他事物也会移动,使用接口(interface)来抽象“移动”。
继承,Java的继承:
继承类extends,实现接口implements,继承,publicclassClassAimplementsMove,Override,publicvoidmove(),.,实现接口,this.name=myName;,this.description=myDescription;,this.dogData=myDogData继承类,interface,classpublicclassDogextendsAnimalprivateStringdogData;myDopguDbaltiac)Dog(StringmyName,StringmyDescription,String,重写:
子类和父类都定义同名方法,子类的方法会覆盖父类中已有的方法。
重载:
多个同名方法,这些方法名字相同、参数不同、返回类型不同。
重写与重载,publicclassClassAimplementsMoveOverridepublicvoidmove().Override:
在子类中重写父类中的同名方法,publicclassOverloading/无参数,返回值为int类型publicinttest()System.out.println(test);return1;/有一个参数publicvoidtest(inta)System.out.println(test+a);/有两个参数和一个返回值publicStringtest(inta,Strings)System.out.println(test+a+s);returna+s;,同名方法重载:
一个类中多个方法都名为test,但是参数类型和返回值类型不同。
案例:
Java中的List和ArrayListArrayList是一个泛型类,List是一个泛型接口ArrayList泛型是一种集合容器,可以向这个集合容器中添加String、Double以及其他各类数据类型。
没必要创建StringArrayList、DoubleArrayList等类。
泛型,iststrList=newArrayList();,ListdoubleList=newLinkedList();,类名后面加上类内部的一些属性和方法都可以使用泛型T泛型规范:
T代表一般的任何类。
E代表元素(Element)或异常(Exception)。
K或KEY代表键(Key)。
V代表值(Value),通常与K一起配合使用。
Java泛型类,publicclassMyArrayListprivateintsize;Telements;publicMyArrayList(intcapacity)this.size=capacity;this.elements=(T)newObjectcapacity;publicvoidset(Telement,intposition)elementsposition=element;OverridepublicStringtoString()Stringresult=;for(inti=0;isize;i+)result+=elementsi.toString();returnresult;,与泛型类类似,使用符号可以继承并实现这个接口,Java泛型接口,publicinterfaceList,.,publicListsubList(intfromIndex,inttoIndex);,publicclassArrayListimplementsList.publicListsubList(intfromIndex,inttoIndex).,/返回一个List类型值,要实现的子类是泛型的,publicclassDoubleListimplementsList.publicListsubList(intfromIndex,inttoIndex).,/返回一个List类型值,要实现的子类不是泛型的,而是有确定类型的,泛型方法可以存在于泛型类中,也可以存在于普通的类中。
泛型方法的类型E和泛型类中的类型T可以不一样。
泛型方法是泛型类的一个成员,泛型方法既可以继续使用类的类型T,也可以自己定义新的类型E。
Java泛型方法,publicclassMyArrayList./public关键字后的表明该方法是一个泛型方法/泛型方法中的类型E和泛型类中的类型T可以不一样publicEprocessElement(Eelement).returnE;,Java泛型信息只存在于代码编译阶段,当程序运行到JVM上时,与泛型相关的信息会被擦除。
对于绝大多数应用系统开发者来说影响不太大,对于框架开发者来说,必须要注意。
类型擦除,ClassstrListClass=newArrayList().getClass();ClassintListClass=newArrayList().getClass();/输出:
classjava.util.ArrayListSystem.out.println(strListClass);/输出:
classjava.util.ArrayListSystem.out.println(intListClass);/输出:
trueSystem.out.println(strListClass.equals(intListClass);,泛型擦除:
无法区别strListClass和intListClass这两个类型,适合进行并行计算的一种编程范式非函数式编程:
创建中间变量,分步执行函数式编程:
与数学表达式更相似实现单个函数,将零到多个输入转换成零到多个输出。
比如,add()将两个输入转化为一个输出。
将多个函数连接起来,实现所需业务逻辑。
比如,将add()、multiply()连接到一起。
函数式编程,addResult=x+y,result=addResult*z,非函数式编程,result=add(x,y).multiply(z),函数式编程,Lambda表达式被一些编程语言用来实现函数式编程。
一个箭头符号-,两边连接着输入参数和函数体。
Lambda表达式,(parameters)-,body,Java的Lambda表达式的语法规则,/接收2个int类型参数,返回它们的和(intx,inty)-x+y/接收1个String类型参数,将其输出到控制台,不返回任何值(Strings)-System.out.print(s);/参数为圆半径,返回圆面积,返回值为double类型(doubler)-doublepi=3.1415;returnr*r*pi;几个JavaLambda表达式案例,输入参数:
接收零到多个输入参数程序员可以提供输入类型,也可以不提供类型,让代码根据上下文去推断参数可以放在圆括号()中,多个参数通过英文逗号,隔开函数体:
可以有一到多行语句函数体有多行内容,必须使用花括号输出的类型与所需要的类型相匹配,JavaLambda表达式,Lambda表达式本质是一种接口,它要实现一个函数式接口(FunctionalInterface)中的虚方法,函数式接口是一种接口,并且它只有一个虚方法。
FunctionalInterface注解,函数式接口,FunctionalInterfaceinterfaceAddInterfaceTadd(Ta,Tb);,publicstaticclassMyAddimplementsAddInterfaceOverridepublicDoubleadd(Doublea,Doubleb)returna+b;,如果没有Lambda表达式,(Integera,Integerb)-a+b;使用Lambda表达式,Java8之后推出的,专注于对集合(Collection)对象的操作。
右侧案例:
数据先经过stream()方法被转换为一个Stream类型,后经过filter()、map()、collect()等处理逻辑,生成我们所需的输出。
各个操作之间使用英文点号.来连接,这种方式被称作链式调用(MethodChaining)。
链式调用:
将多个函数连接起来。
Flink的API是面向数据集或数据流的操作。
这些操作分布在大数据集群的多个节点上,并行地分布式执行。
JavaStreamAPI,Liststrings=Arrays.asList(abc,bc,12345,efg,abcd,jkl);Listlengths=strings.stream().filter(string-!
string.isEmpty().map(s-s.length().collect(Collectors.toList();lengths.forEach(s)-System.out.println(s);,第三章Flink的设计与运行原理,相关概念,方法(Method):
Java或Scala语言中的方法,有输入参数和返回值。
函数(Function):
Flink提供给开发者的接口flatMap()、keyBy()等算子(Operator):
在执行层面,算子对数据进行操作,一般一到多个函数对应一个算子。
Source、Transformation和Sink,数据流图,从代码到逻辑视图逻辑视图中圆圈表示算子,箭头表示数据流可以在FlinkWebUI中查看一个作业的逻辑视图大数据框架的算子对计算做了抽象,方便用户进行并行计算、横向扩展和故障恢复,逻辑视图,分布式环境下并行化物理执行数据流被切分到多个分区(Partition)算子被切分为算子子任务(OperatorSubtask),又被称为算子实例物理执行的基本单元并行度(Parallelism):
衡量并行切分的多少,物理执行,数据在不同算子子任务之间数据交换常见四种数据交换策略:
前向传播(Forward)按Key分组(Keyed-Based)广播(Broadcast)随机(Random),数据交换策略,Master协调管理DispatcherResourceManagerJobManagerTaskManager拥有CPU、内存等计算资源Flink作业被分发到多个TaskManager上并行执行,主从架构,启动一个Flink集群,TaskManager进程启动后会将自己注册给Master的ResourceManagerClient提交作业(Application)Master的Dispatcher接收作业,启动JobManagerJobManager向ResourceManager申请资源,ResourceManager会将闲置资源分配给JobManager作业转化为物理执行图,计算任务分发部署到多个TaskManager上,作业提交过程,作业提交流程,ClientFlink主目录下的bin目录中的命令行工具将用户作业转换为JobGraphDispatcher接收多个作业,为每个作业分配一个JobManagerJobManager单个作业的协调者,每个作业有一个JobManager将JobGraph转化为物理执行图ExecutionGraph向ResourceManager申请资源管理TaskManager,将具体计算任务分发部署到多个TaskManager上,Flink核心组件介绍,ResourceManager统一处理资源分配上的问题获取计算资源、分配给具体计算作业,TaskManager,负责具体计算任务的执行提供一定量的任务槽位(TaskSlot,简称Slot),Flink作业运行在这些Slot上Slot会注册到ResourceManager上,ResourceManager分配这些Slot给具体的作业,部署层Local、Cluster、Cloud运行时层分布式运行时API层流处理-DataStreamAPI批处理DataSetAPI上层工具基于DataStream/DataSetAPI的上层工具,Flink组件栈,StreamGraph根据用户代码生成的图JobGraphStreamGraph优化之后生成JobGraph算子链ExecutionGraphJobGraph的分布式并行版本物理执行图部署到TaskManager上的具体计算任务,再谈逻辑视图到物理执行图,算子链将相近的算子子任务链接在一起链接后形成任务(Task)Task以线程的形式被TaskManager调度可以降低算子子任务之间的传输开销,任务、算子子任务与算子链,上图中,Source和FlatMap链接到了一起,其他算子发生了跨分区数据交换,无法链接到一起。
TaskSlotTaskManager下有多个TaskSlot每个TaskSlot中运行着某些TaskSlot之间的内存相互隔离Slot内部共享TCP连接、心跳等,允许用户设置TaskManager中的Slot的数目,建议将TaskManager下Slot数设置为CPU核心数,任务槽位与计算资源,Slot与TaskManager,多个Task共享一个Slot数据交换成本更低右图中,Source和FlatMap计算量不大,WindowAggregation计算量较大,资源互补,增加并行度后,在同样的计算资源基础上,可以部署更多算子实例,处理的数据量更大,槽位共享,将并行度由2改为6,槽位共享后,多个Task共享一个Slot,可以增大并行度,有限的资源上处理更多数据,并行度逻辑视图并行切分为多个算子子任务每个算子子任务处理输入数据的一部分输入数据量增大时,可适当增大并行度槽位数目针对TaskManager设置资源切分粒度,并行度与槽位数目,第四章DataStreamAPI的介绍和使用,Flink程序的骨架结构,初始化运行环境读取一到多个Source数据源根据业务逻辑对数据流进行Transformation转换将结果输出到Sink调用作业执行函数,执行环境是作业与集群交互的入口设置并行度关闭算子链时间、Checkpoint流处理和批处理的执行环境不一样Java、Scala两套API,设置执行环境,/创建Flink执行环境StreamExecutionEnvironmentenv=StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism
(2);env.disableOperatorChaining();,Source、Transformation和Sink,Source读取数据源统称为Source文件系统、消息队列、数据库等Transformation使用Flink提供的各类函数,进行有状态的计算数据流的分组、窗口和聚合操作等Sink将计算结果输出到外部系统,统称为Sink目的地可以是文件系统、消息队列、数据库等,Flink是延迟执行(LazyEvaluation)的调用execute()方法,Flink才会真正执行否则无法得到计算结果字符串参数为当前作业名/executeenv.execute(kafkastreamingwordcount);,执行,单数据流转换基于Key的分组转换多数据流转换数据重分布转换DataStream泛型T为数据流中每个元素的类型,四类Tranformation转换,每个输入元素对应一个输出元素重写MapFunction或RichMapFunction,MapFunction,T为输入类型,O为输出类型,实现其中的map()虚方法主逻辑中调用该函数,单数据流转换-map,FunctionalInterfacepublicinterfaceMapFunctionextendsFunction,Serializable/调用这个API就是继承并实现这个虚函数Omap(Tvalue)throwsException;,/第一个泛型是输入类型,第二个泛型是输出类型publicstaticclassDoubleMapFunctionimplementsMapFunctionOverridepublicStringmap(Integerinput)returnfunctioninput:
+input+,output:
+(input*2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Flink 原理 实践 全套 教学 课件