第七章作业
3、试述常见的机器学习和数据挖掘的关系
答:数据挖掘是指从大量的数据中通过算法搜索隐藏于其中的信息的过程。数据挖掘可以视为机器学习与数据库的交叉,它主要利用机器学习界提供的算法来分析海量数据,利用数据库界提供的存储技术来管理海量数据。虽然数据挖掘的很多技术都来自机器学习领域,但是,我们并不能因此就认为数据挖掘只是机器学习的简单应用。毕竟,机器学习通常只研究小规模的数据对象,往往无法应用到海量数据,数据挖掘领域必须借助于海量数据管理技术对数据进行存储和处理,同时对一些传统的机器学习算法进行改进,使其能够支持海量数据的情形。典型的机器学习和数据挖掘算法包括分类、聚类、回归分析和关联规则和协同过滤。
①分类。分类是指找出数据库中的一组数据对象的共同特点,并按照分类模式将其划分为不同的类。
②聚类。聚类类似于分类,但与分类的目的不同,是针对数据的相似性和差异性将一组数据分为几个类别。属于同一类别的数据之间的相似性很大,但不同类别之间数据的相似性很小,跨类的数据关联性很低。
③回归分析。回归分析反映了数据库中数据的属性值的特性,通过函数表达数据映射的关系来发现属性值之间的依赖关系。
售趋势做出预测并做出针对性的营销改变。
④关联规则。关联规则是隐藏在数据项之间的关联或相互关系,即可以根据一个数据项的出现推导出其他数据项的出现。
⑤协同过滤。简单来说协同过滤就是利用兴趣相投、拥有共同经验的群体的喜好,来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应并记录下来,以达到过滤的目的,进而帮助别人筛选信息。
5、试述典型的大数据处理与分析技术有哪几种类型,并给出代表性作品。
答:大数据处理与分析技术有四大类型,即批处理计算、流计算、图计算和查询分析计算。
①批处理计算:MapReduce,Spark
②流计算:DStream,银河流数据处理平台
③图计算:GraphX,PowerGraph
④查询分析计算:Dremel,实时查询引擎Impala
6.试述流计算的概念及其处理流程。
答:流计算平台实时获取来自不同数据源的海量数据,经过实时分析处理,获得有价值的信息。
总的来说,流计算秉承一个基本理念,即数据的价值随着时间的流逝而降低。因此,当事件出现时就应该立即进行处理,而不是缓存起来进行批量处理。为了及时处理流数据,需要一个低延迟、可扩展、高可靠的处理引擎。
流计算秉承一个基本理念,即数据的价值随着时间的流逝而降低。因此,当事件出现时就应该立即进行处理,而不是缓存起来进行批量处理。为了及时处理流数据,需要一个低延迟、可扩展、高可靠的处理引擎。对于一个流计算系统来说,它应达到如下需求。
(1)高性能。处理大数据的基本要求,如每秒处理几十万条数据。
(2)海量式。支持TB级甚至是PB级的数据规模。
(3)实时性。必须保证一个较低的延迟时间,达到秒级别,甚至是毫秒级别。
(4)分布式。支持大数据的基本架构,必须能够平滑扩展。
(5)易用性。能快速进行开发和部署。
(6)可靠性。能可靠地处理流数据。
流计算的处理流程:
流计算处理流程包括数据实时采集、数据实时计算和实时查询服务。
传统的数据处理流程需要先采集数据并存储在关系数据库等数据管理系统中,之后用户便可以通过查询操作和数据管理系统进行交互,最终得到查询结果。但是,这样一个流程隐含了两个前提。
①存储的数据是旧的。当查询数据的时候,存储的静态数据已经是过去某一时刻的快照,这些数据在查询时可能已不具备时效性了。
②需要用户主动发出查询。也就是说,用户是主动发出查询来获取结果的。
流计算的数据处理流程一般包含3个阶段:数据实时采集、数据实时计算、实时查询服务。
(1)数据实时采集
数据实时采集阶段通常采集多个数据源的海量数据,需要保证实时性、低延迟与稳定可靠。以日志数据为例,由于分布式集群的广泛应用,数据分散存储在不同的机器上,因此需要实时汇总来自不同机器的日志数据。
(2)数据实时计算
数据实时计算阶段对采集的数据进行实时的分析和计算。数据实时计算的流程如图7-5所示,流处理系统接收数据采集系统不断发来的实时数据,实时地进行分析计算,并反馈实时结果。经流处理系统处理后的数据,可视情况进行存储,以便之后进行分析计算。在时效性要求较高的场景中,处理之后的数据也可以直接丢弃。
(3)实时查询服务
流计算的第3个阶段是实时查询服务,经由流计算框架得出的结果可供用户进行实时查询、展示或存储。在传统的数据处理流程中,用户需要主动发出查询才能获得想要的结果。而在流处理流程中,实时查询服务可以不断更新结果,并将用户所需的结果实时推送给用户。虽然通过对传统的数据处理系统进行定时查询也可以实现不断更新结果和结果推送,但通过这样的方式获取的结果仍然是根据过去某一时刻的数据得到的结果,与实时结果有着本质的区别。
由此可见,流处理系统与传统的数据处理系统有如下不同之处。
①流处理系统处理的是实时的数据,而传统的数据处理系统处理的是预先存储好的静态数据。
②用户通过流处理系统获取的是实时结果,而通过传统的数据处理系统获取的是过去某一时刻的结果。并且,流处理系统无须用户主动发出查询,实时查询服务可以主动将实时结果推送给用户。
(3)实时查询服务
流计算框架得出的结果可供用户进行实时查询、展示或存储。在传统的数据处理流程中,用户需要主动发出查询才能获得想要的结果。而在流处理流程中,实时查询服务可以不断更新结果,并将用户所需的结果实时推送给用户。虽然通过对传统的数据处理系统进行定时查询也可以实现不断更新结果和结果推送,但通过这样的方式获取的结果仍然是根据过去某一时刻的数据得到的结果,与实时结果有着本质的区别。
8.试述MapReduce的工作流程和不足之处。
答: MapReduce工作流程:
MapReduce的核心思想可以用“分而治之”来描述,把一个大的数据集拆分成多个小数据块在多台机器上并行处理。也就是说,一个大的MapReduce作业,首先会被拆分成许多个Map任务在多台机器上并行执行,每个Map任务通常运行在数据存储的节点上。这样计算和数据就可以放在一起运行,不需要额外的数据传输开销。当Map任务结束后,会生成以<key,value>形式表示的许多中间结果。然后,这些中间结果会被分发到多个Reduce任务在多台机器上并行执行,具有相同key的<key,value>会被发送到同一个Reduce任务,Reduce任务会对中间结果进行汇总计算得到最后结果,并输出到分布式文件系统。
MapReduce的不足之处:
①表达能力有限。计算都必须要转化成Map和Reduce两种操作,但这并不适合所有的情况,难以描述复杂的数据处理过程。
②磁盘IO开销大。每次执行时都需要从磁盘读取数据,并且在计算完成后需要将中间结果写入磁盘中,IO开销较大。
③延迟高。一次计算可能需要分解成一系列按顺序执行的MapReduce任务,任务之间的衔接由于涉及IO开销,会产生较高延迟。而且,在前一个任务执行完成之前,其他任务无法开始,因此难以胜任复杂、多阶段的计算任务。
由于MapReduce是基于磁盘的分布式计算框架,因此,性能方面要逊色于基于内存的分布式计算框架(如Spark和Flink等)。所以,随着Spark和Flink的发展,MapReduce的市场空间逐渐被挤压,地位也逐渐被边缘化。
12.试述对分布式计算框架Spark的理解。
答:Spark最初由美国加州大学伯克利分校的AMP实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。 Spark作为大数据计算平台的后起之秀, Spark仅使用了约十分之一的计算资源,获得了约比Hadoop快3倍的速度。表明了Spark可以作为一个更加快速、高效的大数据计算框架。
Spark具有如下4个主要特点。
①运行速度快。Spark使用先进的有向无环图执行引擎,以支持循环数据流与内存计算,基于内存的执行速度可比Hadoop MapReduce快上百倍,基于磁盘的执行速度也能快十倍左右。
②容易使用。Spark支持使用Scala、Java、Python和R进行编程,简洁的API设计有助于用户轻松构建并行程序,并且可以通过Spark Shell进行交互式编程。
③通用性强。Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算。
④运行模式多样。Spark可运行于独立的集群模式中,或者运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源。
Spark相对于MapReduce的优点:
Spark在借鉴Hadoop MapReduce优点的同时,很好地解决了MapReduce所面临的问题。相比于MapReduce,Spark主要具有以下优点。
①Spark的计算模式也属于MapReduce,但不局限于Map和Reduce,还提供了多种数据集操作类型,编程模型比MapReduce更灵活。
②Spark提供了内存计算,中间结果直接放到内存中,带来了更高的迭代运算效率。
③Spark基于DAG的任务调度执行机制,要优于MapReduce的迭代执行机制。
Spark最大的特点就是将计算数据、中间结果都存储在内存中,大大减少了IO开销,因而Spark更适合于迭代运算比较多的数据挖掘与机器学习运算。
使用MapReduce进行迭代计算非常耗资源,因为每次迭代计算都需要从磁盘中写入、读取中间数据,IO开销大。而Spark将数据载入内存后,之后的迭代计算都可以直接使用内存中的中间结果作运算,避免了从磁盘中频繁读取数据。
在实际进行开发时,使用MapReduce需要编写不少相对底层的代码,不够高效。相对而言,Spark提供了多种高层次、简洁的API。通常情况下,对于实现相同功能的应用程序,MapReduce的代码量要比Spark多2~5倍。更重要的是,Spark提供了实时交互式编程反馈,可以方便地验证、调整算法。
近几年来,大数据机器学习和数据挖掘的并行化算法研究成为与Spark执行大数据领域一个较为重要的研究热点。在Spark崛起之前,学界和 逻辑回归所需时间的对比业界普遍关注的是Hadoop平台上的并行化算法设计。但是,MapReduce的网络和磁盘读写开销大,难以高效地实现需要大量迭代计算的机器学习并行化算法。因此,近年来国内外的研究重点开始转到如何在Spark平台上实现各种机器学习和数据挖掘的并行化算法设计。为了方便一般应用领域的数据分析人员使用所熟悉的R语言在Spark平台上完成数据分析,Spark提供了一个称为Spark R的编程接口,使得一般应用领域的数据分析人员,可以在R语言的环境里方便地使用Spark的并行化编程接口和强大的计算能力。
Spark生态系统:
在实际应用中,大数据处理主要包括以下3个情景。
①复杂的批量数据处理:时间跨度通常在数十分钟到数小时。
②基于历史数据的交互式查询:时间跨度通常在数十秒到数分钟。
③基于实时数据流的数据处理:时间跨度通常在数百毫秒到数秒。
目前已有很多相对成熟的开源软件用于处理以上3种情景,比如,可以利用HadoopMapReduce进行批量数据处理,可以用Impala进行交互式查询(Impala与Hive相似,但底层引擎不同,提供了实时交互式SQL查询),对于流式数据处理可以采用开源流计算框架Storm。一些企业可能只会涉及其中部分应用场景,只需部署相应软件即可满足业务需求。但是,对于互联网公司而言,通常会同时存在以上3种场景,就需要同时部署3种不同的软件,这样做难免会带来一些问题。
①不同场景之间输入、输出数据无法做到无缝共享,通常需要进行数据格式的转换。
②不同的软件需要不同的开发和维护团队,带来了较高的使用成本。
③比较难以对同一个集群中的各个系统进行统一的资源协调和分配。
Spark的设计遵循“一个软件栈满足不同应用场景”的理念,逐渐形成了一套完整的生态系统,既能够提供内存计算框架,也可以支持SQL即席查询、实时流式计算、机器学习和图计算等。Spark可以部署在资源管理器YARN之上,提供一站式的大数据解决方案。因此,Spark生态系统足以应对上述3种场景,即同时支持批处理、交互式查询和流数据处理。
Spark生态系统主要包含了Spark Core、Spark SQL、Spark Streaming、Structured Streaming、MLlib和GraphX等组件(见图7-14),各个组件的具体功能如下。
①Spark Core:Spark Core 包含Spark最基础和最核心的功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等,主要面向批数据处理。Spark Core建立在统一的抽象弹性分布式数据集(Resilient Distributed Dataset,RDD)之上,使其可以以基本一致的方式应对不同的大数据处理场景;需要注意的是,Spark Core通常被简称为Spark。
②Spark SQL:Spark SQL是Spark中用于结构化数据处理的组件,提供了一种通用的访问多种数据源的方式,可访问的数据源包括Hive、Avro、Parquet、ORC、JSON和JDBC等。SparkSQL采用了DataFrame数据模型,支持用户在Spark SQL中执行SQL语句,实现对结构化数据的处理。
③Spark Streaming:Spark Streaming是一种流计算框架,可以支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业都可以使用Spark Core进行快速处理。Spark Streaming支持多种数据输入源,如Kafka、④Flume和TCP套接字等。
Structured Streaming:Structured Streaming是一种基于Spark SQL引擎构建的、可扩展且容错的流处理引擎。通过一致的API,Structured Streaming使得使用者可以像编写批处理程序一样编写流处理程序,降低了使用者的使用难度。
⑤MLlib(机器学习):MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发者只要具备一定的理论知识就能进行机器学习的工作。
⑥GraphX(图计算):GraphX是Spark中用于图计算的API,可认为是Pregel在Spark上的重写及优化。GraphX性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。
需要说明的是,无论是Spark SQL、Spark Streaming、Structured Streaming、MLlib,还是GraphX,都可以使用Spark Core的API处理问题,它们的使用方法几乎是通用的,处理的数据也可以共享,不同应用之间的数据可以无缝集成。
Spark运行架构:
Spark运行架构包括集群管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver Program,或简称为Driver)和每个工作节点上负责具体任务的执行进程(Executor)。其中,集群管理器可以是Spark自带的资源管理器,也可以是YARN或Mesos等资源管理框架。可以看出,就系统架构而言,Spark采用“主从架构”,包含一个Master(即Driver)和若干个Worker。
与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点。一是利用多线程来执行具体的任务(Hadoop MapReduce采用的是进程模型),减少任务的启动开销。二是Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备(默认使用内存,当内存不够时,会写到磁盘),当需要多轮迭代计算时,可以将中间结果存储到这个存储模块里,下次需要时,就可以直接读该存储模块里的数据,而不需要读写到HDFS等文件系统里,从而有效减少IO开销。
Spark的部署方式:
目前,Spark支持5种不同类型的部署方式,包括Local、Standalone、Spark on Mesos、Sparkon YARN和Spark on Kubernetes。其中,Local模式属于单机部署模式,其他属于分布式部署模式, 具体如下。
①Standalone模式。与MapReduce1.0框架类似,Spark框架也自带了完整的资源调度管理服务,可以独立部署到一个集群,而不需要依赖其他系统来为其提供资源管理调度服务。在架构的设计上,Spark与MapReduce1.0完全一致,都是由一个Master和若干个Slave节点构成,并且以槽(Slot)作为资源分配单位。不同的是,Spark中的槽不再像MapReduce1.0那样分为Map槽和Reduce槽,而是只设计了统一的一种槽提供给各种任务来使用。
②Spark on Mesos模式。Mesos是一种资源调度管理框架,可以为运行在它上面的Spark提供服务。由于Mesos和Spark存在一定的“血缘关系”,因此Spark这个框架在进行设计开发的时候就充分考虑到了对Mesos的支持。相对而言,Spark运行在Mesos上,要比运行在YARN上更加灵活、自然。目前,Spark官方推荐采用这种模式,所以许多公司在实际应用中也采用这种模式。
③Spark on YARN模式。Spark可运行于YARN之上,与Hadoop进行统一部署,即“Spark on YARN”,其架构如图7-16所示,资源管理和调度依赖于YARN,分布式存储则依赖于HDFS。
④Spark on Kubernetes模式。Kubernetes作为一个广受欢迎的开源容器协调系统,是Google于2014年酝酿的项目。Kubernetes自2014年以来热度一路飙升,短短几年时间就已超越了大数据分析领域的明星产品Hadoop。Spark从2.3.0版本引入了对Kubernetes的原生支持,可以将编写好的数据处理程序直接通过spark-submit提交到Kubernetes集群。
19.请将Structured Streaming 和 Spark SQL Spark Streaming进行对比分析。
答:Spark SQL在Shark原有的架构基础上重写了逻辑执行计划的优化部分,解决了Shark存在的问题。Spark SQL可以提供DataFrame API,可以对内部和外部各种数据源执行各种关系操作;其次,可以支持大量的数据源和数据分析算法,组合使用Spark SQL和Spark MLlib,可以融合传统关系数据库的结构化数据管理能力和机器学习算法的数据处理能力,有效满足各种复杂的应用需求。
Spark Streaming是构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力。Spark Streaming可结合批处理和交互查询,适合一些需要对历史数据和实时数据结合分析的应用场景。
Spark Streaming是Spark的核心组件之一,为Spark提供了可拓展、高吞吐量、容错的流计算能力。Spark Streaming可整合多种输入数据源。在Spark Streaming中,会有一个组件Receiver,作为一个长期运行的任务(Task)运行在一个Executor上,每个Receiver组件都会负责一个DStream输入流(如从文件中读取数据的文件流、套接字流,或者从Kafka 中读取的一个输入流等)。Receiver组件接收到数据源发来的数据后,会提交给Spark Streaming程序进行处理。处理后的结果,可以交给可视化组件进行可视化展示,也可以写入HDFS、HBase中。
Structured Streaming是一种基于Spark SQL引擎构建的、可扩展且容错的流处理引擎。通过一致的API,Structured Streaming使得使用者可以像编写批处理程序一样编写流处理程序,降低了使用者的使用难度。提供端到端的完全一致性是Structured Streaming设计背后的关键目标之一。Structured Streaming的关键思想是将实时数据流视为一张正在不断添加数据的表,这种新的流处理模型与批处理模型非常类似。可以把流计算等同于在一个静态表上的批处理查询,Spark会在不断添加数据的无界输入表上运行计算,并进行增量查询。
Structured Streaming和Spark SQL、Spark Streaming关系:
Structured Streaming与Spark Streaming一样,处理的也是源源不断的数据流,区别在于,SparkStreaming采用的数据抽象是DStream(本质上就是一系列RDD),而Structured Streaming采用的数据抽象是DataFrame。Structured Streaming 可以使用Spark SQL 的DataFrame/Dataset来处理数据流。虽然Spark SQL也采用DataFrame作为数据抽象,但是,Spark SQL只能处理静态的数据,
而Structured Streaming可以处理结构化的数据流。这样,Structured Streaming就将Spark SQL和Spark Streaming二者的特性结合了起来。Structured Streaming可以对DataFrame/Dataset应用各种操作,包括select、where、groupBy、map、filter、flatMap等。此外,Spark Streaming只能实现秒级的实时响应,而Structured Streaming由于采用了全新的设计方式,采用微批处理模型时可以实现100ms级别的实时响应,采用持续处理模型时可以实现毫秒级的实时响应。
20、试述Spark MLlib的功能以及它提供了哪些工具。
答:MLlib(Machine Learning Library)是Spark的机器学习库,旨在简化机器学习的工程实践,并能够方便地扩展到更大规模数据。MLlib提供了主要的机器学习算法,包括用于特征预处理的数理统计方法,特征提取、转换和选择,以及分类、回归、聚类、关联规则、推荐、优化、算法的评估等。MLlib由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道API。具体来说,MLlib主要包括以下几方面的内容。
① 算法工具:常用的学习算法,如分类、回归、聚类和协同过滤。
②特征化工具:特征抽取、转化、降维和选择工具。
③流水线(Pipeline):用于构建、评估和调整机器学习工作流的工具。
④持久性:保存和加载算法、模型和管道。
⑤实用工具:线性代数、统计、数据处理等工具。
Spark在机器学习方面的发展非常快,已经支持了主流的统计和机器学习算法。纵观所有基于分布式架构的开源机器学习库,MLlib以计算效率高著称。
24.请对Spark Streaming 和 Storm 进行简要对比。
答:Spark Streaming 和 Storm 最大的区别在于, Spark Streaming 无法实现毫秒级的流计算,而 Storm 可以实现毫秒级响应。
Spark Streaming 无法实现毫秒级的流计算,是因为其将流数据按批处理窗口大小(通常在0.5~2s)分解为一系列批处理作业,在这个过程中会产生多个 Spark 作业,且每一段数据的处理都会经过 Spark DAG 分解、任务调度过程,因此无法实现毫秒级响应。 Spark Streaming 难以满足对实时性要求非常高(如高频实时交易)的场景,但足以胜任其他流式准实时计算场景。相比之下, Storm 处理的单位为 Tuple ,只需要极小的延迟。
Spark Streaming 构建在 Spark 上,一方面是因为 Spark 的低延迟执行引擎可以用于实时计算,另一方面,相比于 Storm , RDD 数据集更容易做高效的容错处理。此外, Spark Streaming 采用的小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法,因此方便了一些需要历史数据和实时数据联合分析的特定应用场合。
25.试述为什么流计算场景比较适合采用Flink.
答: Flink所要处理的主要场景是流数据,批数据只是流数据的一个特例而已。也就是说,Flink会把所有任务当成流来处理。Flink可以支持本地的快速迭代计算和一些环形的迭代计算任务。
Flink以层级式系统形式组建其软件栈(见图7-33),不同层的栈建立在其下层的基础上。具体而言,Flink的典型特性如下。
①提供了面向流处理的DataStream API和面向批处理的DataSet API。DataSet API支持Java、Scala和Python,DataStream API支持Java和Scala。
②提供了多种候选部署方案,比如本地模式(Local)、集群模式(Cluster)和云模式(Cloud)。对于集群模式而言,可以采用独立模式(Standalone)或YARN。
③提供了一些类库,包括Table(处理逻辑表查询)、FlinkML(机器学习)、Gelly(图像处理)和CEP(复杂事件处理)。
④提供了较好的Hadoop兼容性,不仅可以支持YARN,还可以支持HDFS、HBase等数据源。
Flink和Spark一样,都是基于内存的计算框架,因此,都可以获得较好的实时计算性能。当两者都运行在Hadoop YARN之上时,Flink的性能甚至略好于Spark。因为,Flink支持增量迭代计算,具有对迭代计算进行自动优化的功能。Flink和Spark Streaming都支持流计算,二者的区别在于,Flink是一行一行地处理数据,而Spark Streaming是基于RDD的小批量处理数据,所以,Spark Streaming在流式处理方面,不可避免地会增加一些延迟,实时性没有Flink好。Flink的流计算性能和Storm差不多,可以支持毫秒级的响应,而Spark Streaming只能支持秒级响应。总体而言,Flink和Spark都是非常优秀的基于内存的分布式计算框架,但是,Spark的市场影响力和社区活跃度明显超过Flink,这在一定程度上限制了Flink的发展空间。
Flink是理想的流计算框架
流处理架构需要具备低延迟、高吞吐和高性能的特性,而目前从市场上已有的产品来看,只有Flink可以满足要求。Storm虽然可以做到低延迟,但是无法实现高吞吐,也不能在故障发生时准确地处理计算状态。Spark Streaming通过采用微批处理模型实现了高吞吐和容错性,但是牺牲了低延迟和实时处理能力。Structured Streaming采用持续处理模型可以支持毫秒级的实时响应,但是,这是以牺牲一致性为代价的,持续处理模型只能做到“至少一次”的一致性,而无法保证端到端的完全一致性。
Flink实现了Google Dataflow流计算模型,是一种兼具高吞吐、低延迟和高性能的实时流计算框架,并且同时支持批处理和流处理。此外,Flink支持高度容错的状态管理,防止状态在计算过程中因为系统异常而出现丢失。因此,Flink成为了能够满足流处理架构要求的理想的流计算框架。