为何Flink会成为下一代大数据处理框架的标准?数据库
01 什么是Flink?编程
在当前数据量激增传统的时代,不一样的业务场景都有大量的业务数据产生,对于这些不断产生的数据应该如何进行有效地处理,成为当下大多数公司所面临的问题。网络
随着雅虎对Hadoop的开源,愈来愈多的大数据处理技术开始涌入人们的视线,例如目前比较流行大数据处理引擎Apache Spark,基本上已经取代了MapReduce成为当前大数据处理的标准。架构
但随着数据的不断增加,新技术的不断发展,人们逐渐意识到对实时数据处理的重要性,企业须要可以同时支持高吞吐、低延迟、高性能的流处理技术来处理日益增加的数据。框架
相对于传统的数据处理模式,流式数据处理则有着更高的处理效率和成本控制。Apache Flink就是近年来在开源社区发展不断发展的可以支持同时支持高吞吐、低延迟、高性能分布式处理框架。运维
在2010至2014年间,由柏林工业大学,柏林洪堡大学和哈索普拉特纳研究所联合发起名为“Stratosphere: Information Management on the Cloud”研究项目,该项目在当时的社区逐渐具备必定社区知名度,2014年4月,Stratosphere代码被贡献给Apache 软件基金会,成为Apache基金会孵化器项目。分布式
期初参与该项目的核心成员均来自Stratosphere原来的核心成员,以后团队的大部分创始成员离开学校,共同创办了一家名叫Data Artisans的公司,其主要业务即是将Stratosphere,也就是以后的Flink实现商业化。在项目孵化期间,项目Stratosphere更名为Flink。oop
Flink在德语中是快速和灵敏的意思,用来体现流式数据处理器的速度快和灵活性强等特色,同时使用棕红色松鼠图案做为Flink项目的Logo,也是主要借助于松鼠灵活快速的特色,由此Flink开始正式地进入社区开发者的视线。性能
02 为何Flink会成为下一代大数据处理框架的标准?大数据
在2014年12月,该项目成为Apache 软件基金会顶级项目,从2015年09月发布第一个稳定版本0.9,到2019年4月已经发布到1.8的版本,更多的社区开发成员也逐步地加入,如今Flink在全球范围内拥有350多位的开发人员,不断有新的特性被发布。
同时在全球范围内,愈来愈多的公司开始使用Flink,在国内比较出名的互联网公司如Alibaba,美团,滴滴等,都在大规模的使用Flink做为企业的分布式大数据处理引擎。
Flink在近年来逐步被人们所熟知和使用,其主要缘由不只由于提供同时支持高吞吐、低延迟和exactly-once语义的实时计算能力,同时Flink还提供了基于流式计算引擎处理批量数据的计算能力,真正意义实现了批流统一,同时随着Alibaba对Blink的开源,极大地加强了Flink对批计算领域的支持。
众多优秀的特性,使得Flink成为开源大数据数据处理框架中的一颗新星,随着国内社区不断推进,愈来愈多的国内公司开始选择使用Flink做为实时数据处理的技术,在未来不久的时间内,Flink也将会成为企业内部主流的数据处理框架,最终成为下一代大数据数据处理框架的标准。
03 Flink的重要特性及优点
有状态流计算将会随着技术的发展,逐步成为企业做为构建数据平台的架构模式,而这种技术实现的开源方案目前从社区来看,可以知足的就是Apache Flink。Flink经过实现Google Dataflow流式计算模型实现了高吞吐,低延迟,高性能兼具实时流式计算框架。
▲有状态计算架构
同时Flink支持高效容错的状态管理,Flink可以将其状态维护在内存或RockDB数据库中,为了防止状态在计算过程当中由于系统异常而出现丢失,Flink周期性的经过分布式快照技术CheckPoints实现状态的持久化维护,使得在系统即便在停机或者异常的状况下都能正确的进行状态恢复,从而保证在任什么时候间都能计算出正确的结果。
数据架构的演变过程,伴随着技术的不断迭代更新,Flink具备先进的架构理念,以及诸多的优秀特性,以及完善的编程接口,而Flink也在每一次的Release版本中,不断推出新的特性。
例如Queryable State功能的提出,将直接允许用户经过远程的方式直接获取流式计算任务的状态信息,也就是说数据不须要落地数据库就能直接从流式应用中直接查询出,对于实时交互式的查询业务能够直接从Flink的状态中查询最新的结果,固然这个功能目前还属于Beta版本,可是相信在不久的将来,会变得愈来愈完善,那时Flink将不只做为实时流式处理的框架,更多的可能会成为一套实时的存储引擎,会让更多的用户从有状态计算的技术中获取收益。
同时支持高吞吐、低延迟、高性能
Flink是一套集高吞吐,低延迟,高性能三者于一身的分布式流式数据处理框架。
很是成熟的计算框架Apache Spark也只能兼顾高吞吐和高性能特性,在Spark Streaming流式计算中没法作到低延迟保障;而Apache Storm只能支持低延迟和高性能特性,可是没法知足高吞吐的要求。而对于知足高吞吐,低延迟,高性能这三个目标对分布式流式计算框架是很是重要的。
支持事件时间(Event Time)概念
在流式计算领域中,窗口计算的地位举足轻重,但目前大多数计算框架窗口计算所采用的都是系统时间(Process Time),也是事件传输到计算框架处理时,系统主机的当前时间,Flink可以支持基于事件时间(Event Time)语义的进行窗口计算,就是使用事件产生的时间,这种时间机制使得事件即便无序到达甚至延迟到达,数据流都可以计算出精确的结果,同时保持了事件本来产生时的在时间维度的特色,而不受网络传输或者计算框架的影响。
支持有状态计算
Flink在1.4版本中实现了状态管理,所谓状态就是在流式计算过程当中将算子的中间结果数据的保存在内存或者DB中,等下一个事件进入接着从状态中获取中间结果进行计算,从而无需基于所有的原始数据统计结果,这种作法极大地提高了系统的性能,同时也下降了计算过程的耗时。
对于数据量很是大且逻辑运算很是复杂的流式运算,基于状态的流式计算则显得很是使用。
支持高度灵活的窗口(Window)操做
在流处理应用中,数据是接二连三的,须要经过窗口的方式对流数据进行必定范围的聚合计算,例如统计在过去的1分钟内有多少用户点击了某一网页,在这种状况下,咱们必须定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据再进行计算。
Flink将窗口划分为基于Time、Count、Session,以及Data-driven等类型的窗口操做,窗口可以用灵活的触发条件定制化从而达到对复杂的流传输模式的支持,不一样的窗口操做应用可以反馈出真实事件产生的状况,用户能够定义不一样的窗口触发机制来知足不一样的需求。
基于轻量级分布式快照(Snapshot)实现的容错
Flink可以分布式运行在上千个节点之上,将一个大型计算的流程拆解成小的计算过程,而后将计算过程分布到单台并行节点上进行处理。
在任务执行过程当中,可以自动的发现事件处理过程当中的错误而致使数据不一致的问题,常见的错误类型例如:节点宕机,或者网路传输问题,或是因为用户由于升级或修复问题而致使计算服务重启等。
在这些状况下,经过基于分布式快照技术的Checkpoints,将执行过程当中的任务信息进行持久化存储,一旦任务出现异常宕机,Flink可以进行任务的自动恢复,从而确保数据在处理过程当中的一致性。
基于JVM实现独立的内存管理
内存管理是每套计算框架须要重点考虑的领域,尤为对于计算量比较大的计算场景,数据在内存中该如何进行管理,针对内存管理这块,Flink实现了自身管理内存的机制,尽量减小Full GC对系统的影响。
另外经过自定义序列化/反序列化方法将全部的对象转换成二进制在内存中存储,下降数据存储的大小,更加有效的对内存空间进行利用,下降GC所带来的性能降低或者任务中止的风险,同时提高了分布式处理过数据传输的性能。
所以Flink较其余分布式处理的框架则会显得更加稳定,不会由于JVM GC等问题而致使整个应用宕机的问题。
Save Points(保存点)
对于7*24小时运行的流式应用,数据源源不断的接入,在一段时间内应用的终止都有可能致使数据的丢失或者计算结果的不许确性,例如进行版本的升级,停机运维操做等,都能致使这种状况发生。
然而值得一提的是Flink经过其Save Points技术可以将任务执行的快照(Snapshot)保存在存储介质上,等待任务重启的时候能够直接从实现保存的Save Points恢复原有的计算状态,使得任务继续按照停机以前的状态继续运行,Save Points技术可让用户更好的管理和运维实时流式应用。
同时Flink除了上述的特性以外也具备其余很是优秀的特性,可让用户有更多选择。Flink具有很是多的优秀特性,这不只让Flink在社区的知名度愈来愈高,也吸引了众多的企业参与研发和使用Flink这项技术。