2022Apache Flink 必知必会知识.docx
《2022Apache Flink 必知必会知识.docx》由会员分享,可在线阅读,更多相关《2022Apache Flink 必知必会知识.docx(180页珍藏版)》请在三一办公上搜索。
1、ApacheFlink必知必会知识目录走进APaCheFlink4StreamProcessingwithApacheFlink25FlinkRuntimeArchitecture46Fault-toleranceinFlink64FlinkSQ1._Table介绍与实战94PyFIink快速上手115FlinkEcosystems141154FlinkConnector详解走进ApacheFlink 什么是APaCheFlink 为什么要学习APaCheFlink ApacheFlink典型应用场景 pacheFlink基本概念APACHESOFYWARfFounoation、什么是APae
2、heFlinktbe.3System,KV-Store(mEWmloe0M4se,FileSystem,KV-StorcApacheFlink是一个开源的基于流的有状态计算框架。它是分布式地执行的,具备低延迟、高吞吐的优秀性能,并且非常擅长处理有状态的复杂计算逻辑场景。(一)FIink的起源ApachcFlink是Apachc开源软件基金会的一个顶级项目,和许多APaChC顶级项目一样,如Spark起源于UC伯克利的实验室,Flink也是起源于非常有名的大学的实验室一一柏林工业大学实验室。TllTechnischeUniversitatBER1.INIfiU工学(TechnischeUnive
3、rsitatBerlin)StratosphereBigDatalookstinyfromhere.ContributorsM2$comntwtors项目最初的名称为Stratosphere,目标是要让大数据的处理看起来更加地简洁。项目初始的代码贡献者中,有很多至今仍活跃在Apache的项目管理委员会里,在社区里持续做出贡献2010年簧StratosphereFIink2014年Stratosphere项目于2010年发起,从它的Gitcommit日志里面可以看到,它的第一行代码是在2010年的12月15日编写的。From:RoOertNetzgerSUbjof,1U,UdnijIHFSHlT
4、lW.m(OrtheStratosphereprojectDateIMay14.214;t2:4肌26AMPDTJTo:TwTj?OrgFllnkReply-To:devfstratosphere.Incubator.apache.Org2014年5月,Stratosphere项目被贡献到Apache软件基金会,作为孵化器项目进行孵化,并更名为Flink0(二)Flink的发展IlH,Flink项目非常活跃,2014年的8月27号发布了孵化器里的第一个版本v,6-IncubatingoFro:KostasTxoumi3:(264八2八213:99;3J1.Ut:achFlUtkFro:Robe
5、rtMetzgerls:2014年12月12日成为Apache顶级项目Flink飨一个ReleaSe版本Flink0.8.0由于Flink项目吸引了非常多贡献者参与,活跃度等方面也都非常优秀,它在2014年12月成为了Apache的顶级项目。成为顶级项目之后,它在一个月之后发布了第一个Release版本Flink0.8,0o在此之后,Flink基本保持4个月1个版本的节奏,发展到今天。(三)FIink的现状-APaChe社区最活跃的项目 用户与开发者邮件列表-第1名 开发古代码提交次数-第2名 GithUb用户访问量第2名rse.om,WAtAPgC6(f2,34OC.PyCOMCASTDDi
6、Di舒BUU奥而美团Ctripm怔WSKtelecomemcssT1.APACHEDSTORMSpaStreaming流计算引擎进行了很多代的演进,第一代流计算引擎ApacheStorm是一个纯流的设计,延迟非常的低,但是它的问题也比较明显,即没有办法避免消息的重复处理,从而导致数据正确性有一定的问题。SparkStreaming是第二代流计算引擎,解决了流计算语义正确性的问题,但是它的设计理念是以批为核心,最大的问题是延迟比较高,只能做到10秒级别的延迟,端到端无法实现秒以内的延迟。Flink是第三代流计算引擎,也是最新一代的流计算引擎。它既可以保证低延迟,同时又可以保证消息的一致性语义,对
7、于内置状态的管理,也极大降低了应用程序的复杂度。三、ApacheFlink典型应用场景(一)事件驱动型应用第一类应用场景是事件驱动型应用。事件驱动表示一个事件会触发另一个或者是很多个后续的事件,然后这一系列事件会形成一些信息,基于这些信息需要做一定的处理。在社交场景下,以微博为例,当我们点击了一个关注之后,被关注人的粉丝数就会发生变化。之后如果被关注的人发了一条微博,关注他的粉丝也会收到消息通知,这是一个典型的事件驱动。另外,在网购的场景底下,如用户给商品做评价,这些评价一方面会影响店铺的星级,另外一方面有恶意差评的检测。此外,用户通过点击信息流,也可以看到商品派送或其他状态,这些都可能触发后
8、续的一系列事件。还有金融反欺诈的场景,诈骗者通过短信诈骗,然后在取款机窃取别人的钱财。在这种场景底下,我们通过摄像头拍摄后,迅速反应识别出来,然后对犯罪的行为进行相应的处理。这也是一个典型的事件驱动型应用。淘宝总结一下,事件驱动型应用是一类具有状态的应用,会根据事件流中的事件触发计算、更新状态或进行外部系统操作。事件驱动型应用常见于实时计算业务中,比如:实时推荐,金融反欺诈,实时规则预警等。(二)数据分析型应用第二类典型应用场景是数据分析型应用,如双11成交额实时汇总,包括PV、UV的统计。包括上方图中所示,是Apache开源软件在全世界不同地区的一个下载量,其实也是一个信息的汇总。还包括一些
9、营销大屏,销量的升降,营销策略的结果进行环比、同比的比较,这些背后都涉及到大量信息实时的分析和聚合,这些都是Flink非常典型的使用场景。COT=T订单创建峰值i85855数据体量fi5t三S三fiSJ7TB7TB计算规模-r-JZ如上图所示,以双11为例,在2020年天猫双11购物节,阿里基于Fhnk的实时计算平台每秒处理的消息数达到了40亿条,数据体量达到7TB,订单创建数达到58万/秒,计算规模也超过了150万核。可以看到,这些应用的场景体量很大且对于实时性要求非常高,这也是ApacheFlink非常擅长的场景。(三)数据管道型应用(ET1.)ApacheFlink擅长的第三类场景为数据
10、管道型应用,即ET1.oET1.(Extract-Transform-1.oad)是从数据源抽取,转换/加载,数据至目的端的过程。传统的ET1.使用离线处理,经常做的是小时级别或者天级别的ET1.o但是,随着大数据处理呈现实时化趋势,我们也会有实时数仓的需求,要求在分钟级或者秒级就能够对数据进行更新,从而进行及时的查询,能够看到实时的指标,然后做更实时的判断和分析。F4SyvtemComckxKAflcaConnoctcfElasttcMafchCannectorHBaMCorwMctorJDBCConnKtorHiveComeciofOrcbteSourcCtv1MS*Flink三行ET1.
11、的优势AleSysMmConnectorKComdorEtetKMfchConnectorHBftMCorvwcttxJOeCCOnneCtOrHRmConnectorOrcTabtoSourcCWTBMSinkJD8CAppor11*MSrfcCMMndrflppMTabSlines三env.*ddSourc(nwFlinkKafkaConsuraerO(.);Dat*Stranevents-lines.map(line)-parse(line);DataStreanK.statsHevents.kyBy(event-event.id).tinWindow(Time.seconds(10).
12、apply(newMywindowAggregationFunction();stats.addSink(nwMySink(.);如上方所示,代码是一个简单的Flink作业描述。它首先定义了一个KafkaSource,说明数据源是来自于Kafka消息队列,然后解析Kafka里每一条数据。解析完成后,下发的数据我们会按照事件的ID进行KeyBy,每个分组每10秒钟进行一次窗口的聚合。聚合处理完之后,消息会写到自定义的Sink,以上是一个简单的作业描述,这个作业描述会映射到一个直观的逻辑拓扑。可以看到逻辑拓扑里面有4个称为算子或者是运算的单元,分别是Source.Map、KeyBy/Window/
13、Apply、Sink,我们把逻辑拓扑称为StreamingDataflowe()Flink物理拓扑2W愣.I1.-ITT铲MraMtvnI逻辑柘扑对应物理拓扑,它的每一个算子都可以并发进行处理,进行负裁均衡与处理加速等。大数据的处理基本上都是分布式的,每一个算子都可以有不同的并发度。有KeyBy关键字的时候,会按照key来对数据进行分组,所以在KeyBy前面的算子处理完之后,数据会进行一个Shuffle并发送到下一个算子里面。上图代表了示例对应的物理拓扑。(四)Flink状态管理和快照接下来我们看下Flink里面的状态管理和快照。Sourcesmap()hevOSourcerapflxmiRe
14、moteFileSystemScalableembeddedstategaScaleswithparalleloperatorsfcevWIW*0在进行Window的聚合逻辑时,每隔10秒会对数据进行聚合函数的处理。这10秒内的数据需要先存储起来,待时间窗口触发时进行处理。这些状态数据会以嵌入式存储的形式存储在本地。这里的嵌入式存储既可以是进程的内存里,也可以是类似RocksDB的持久化KV存储,两者最主要的差别是处理速度与容量。此外,这些有状态算F的每个并发都会有个本地的存储,因此它的状态数据本身可以跟随算子的并发度进行动态的扩缩容,从而可以通过增加并发处理很大的数据量。checkpoint
15、barrierMvey(Vwdowfl/WhrOScalableembeddedstateScaleswithparalleloperatorsSBywwindow)/WM)RemoteFileSvstem另一方面,作业在很多情况下有可能会失败。失败之后重新去运行时,我们如何保证数据的一致性?Flink基于Chandy-1.amport算法,会把分布式的每一个节点的状态保存到分布式文件系统里面作为CheCkPOint(检查点),过程大致如下。首先,从数据源端开始注入CheckpointBarrier,它是一种比较特殊的消息。Sourcemap()ErO/wi11duw/OPhTi)Scalab
16、leembeddedstateScaleswithparalleloperatorshryByCtwtW(.)Flink里另个很重要的定义是EventTimeo在Flink里有三种不同的时间,EventTime指事件发生的时间,IngestionTime指事件到达Flink数据源的时间,或者说进入到Flink处理框架的时间,ProcessingTime指处理时间,即到达算子当前的时间,这三个之间有什么区别呢?在现实世界中,这个事件从发生到写入到系统里面,期间的间隔可能比较久。例如在地铁里面信号较弱时,如果我们在微博进行转发、评论、点赞等操作,由于网络的原因,这些操作可能要等我们出了地铁后才能完
17、成,因此可能有些先发生的事件会后到达系统。而EventTime能够更真实地反映事件发生的时间点,因此在很多场景下,我们用EventTime作为事件发生的时间。但是在这种情况底下,山于存在的延迟,所以在窗口需要花费较长的时间等待它的到来,端到端的延迟可能较大。我们还需要处理乱序的问题,如果用ProCeSSingTime当做事件时间的话,处理较快,延迟较低,但是无法反映真实事件发生的情况。因此在真实的开发应用时.,霜要根据应用的特点做相应的取舍。(六)FlinkAPIStream&BatchProcessingStatefulEvent-DrivenApplicationsAnalyticsTab
18、leAPI(dynamictables)DatoStreamAPI(streams,windows)ProcessFunction(events,state,time)FHnk可分成4个层次的API,最底层的API是可以自定义的ProcessFunction,对一些最基本的元素,如时间、状态等,进行细节的处理,实现自己的逻辑。再往上一层是DaiaSireamAP1.它可以做流和批的处理,另外一方面它是逻辑的表达,有很多Flink内置的函数,方便用户编写程序。最上层的API是TabIeAPI和StreamSQ1.,这是一个非常上层的表达形式,非常简洁,我们接下来分别举例说明。6.1 Proces
19、sFunction可以看到,在ProcessElement里边,能够对这个事件、状态进行自定义逻辑的处理。另外,我们可以注册一个timer,并且自定义当timer被触发或时间到达的时候,到底要进行哪些处理,是一个非常精细的底层控制。6.2 DataStreamAPlDataStreamAPl是作业的描述,可以看到它有很多内置的函数,如Map、keyBy、timeWindow、sum等。这也有些我们刚才自定义的ProcessFunction,如MyAggregationFunction06.3 TableAPI&StreamSQ1.同样的逻辑,如果用TabIeAPI和StreamSQ1.描述的话
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022Apache Flink 必知必会知识 2022 Apache 必知必会 知识
链接地址:https://www.31ppt.com/p-7147423.html