数据存储管理系统技术架构(传统大数据存储的架构有哪些各有什么特点)

seosqwseo3周前 (04-20)测评日记12

一、大数据存储与应用特点及技术路线分析

大数据存储与应用特点及技术路线分析

大数据时代,数据呈*炸式增长。从存储服务的发展趋势来看,一方面,对数据的存储量的需求越来越大;另一方面,对数据的有效管理提出了更高的要求。大数据对存储设备的容量、读写性能、可靠性、扩展性等都提出了更高的要求,需要充分考虑功能集成度、数据安全性、数据稳定性,系统可扩展性、性能及成本各方面因素。

大数据存储与应用的特点分析

“大数据”是由数量巨大、结构复杂、类型众多数据构成的数据**,是基于云计算的数据处理与应用模式,通过数据的整合共享,交叉复用形成的智力资源和知识服务能力。其常见特点可以概括为3V:Volume、Velocity、Variety(规模大、速度快、多样性)。

大数据具有数据规模大(Volume)且增长速度快的特性,其数据规模已经从PB级别增长到EB级别,并且仍在不断地根据实际应用的需求和企业的再发展继续扩容,飞速向着ZB(ZETA-BYTE)的规模进军。以国内大的电子商务企业淘宝为例,根据淘宝网的数据显示,至2011年底,淘宝网高单日独立用户访问量超过1.2亿人,比2010年同期增长120%,注册用户数量超过4亿,**商品数量达到8亿,页面浏览量达到20亿规模,淘宝网每天产生4亿条产品信息,每天活跃数据量已经超过50TB.所以大数据的存储或者处理系统不仅能够满足当前数据规模需求,更需要有很强的可扩展性以满足快速增长的需求。

(1)大数据的存储及处理不仅在于规模之大,更加要求其传输及处理的响应速度快(Velocity)。

相对于以往较小规模的数据处理,在数据中心处理大规模数据时,需要服务集群有很高的吞吐量才能够让巨量的数据在应用开发人员“可接受”的时间内完成任务。这不仅是对于各种应用层面的计算性能要求,更加是对大数据存储管理系统的读写吞吐量的要求。例如个人用户在网站选购自己感兴趣的货物,网站则根据用户的购买或者浏览网页行为实时进行相关广告的推荐,这需要应用的实时反馈;又例如电子商务网站的数据分析师根据购物者在当季搜索较为热门的关键词,为商家提供推荐的货物关键字,面对每日上亿的访问记录要求机器学习算法在几天内给出较为准确的推荐,否则就丢失了其失效性;更或者是出租车行驶在城市的道路上,通过GPS反馈的信息及监控设备实时路况信息,大数据处理系统需要不断地给出较为便捷路径的选择。这些都要求大数据的应用层可以快的速度,高的带宽从存储介质中获得相关海量的数据。另外一方面,海量数据存储管理系统与传统的数据库管理系统,或者基于磁带的备份系统之间也在发生数据交换,虽然这种交换实时性不高可以离线完成,但是由于数据规模的庞大,较低的数据传输带宽也会降低数据传输的效率,而造成数据迁移瓶颈。因此大数据的存储与处理的速度或是带宽是其性能上的重要指标。

(2)大数据由于其来源的不同,具有数据多样性的特点。

所谓多样性,一是指数据结构化程度,二是指存储格式,三是存储介质多样性。对于传统的数据库,其存储的数据都是结构化数据,格式规整,相反大数据来源于日志、历史数据、用户行为记录等等,有的是结构化数据,而更多的是半结构化或者非结构化数据,这也正是传统数据库存储技术无法适应大数据存储的重要原因之一。所谓存储格式,也正是由于其数据来源不同,应用算法繁多,数据结构化程度不同,其格式也多种多样。例如有的是以文本文件格式存储,有的则是网页文件,有的是一些被序列化后的比特流文件等等。所谓存储介质多样性是指硬件的兼容,大数据应用需要满足不同的响应速度需求,因此其数据管理提倡分层管理机制,例如较为实时或者流数据的响应可以直接从内存或者Flash(SSD)中存取,而离线的批处理可以建立在带有多块磁盘的存储服务器上,有的可以存放在传统的SAN或者NAS网络存储设备上,而备份数据甚至可以存放在磁带机上。因而大数据的存储或者处理系统必须对多种数据及软硬件平台有较好的兼容性来适应各种应用算法或者数据提取转换与加载(ETL)。

大数据存储技术路线典型的共有三种:

第一种是采用MPP架构的新型数据库集群,重点面向行业大数据,采用Shared Nothing架构,通过列存储、粗粒度索引等多项大数据处理技术,再结合MPP架构高效的分布式计算模式,完成对分析类应用的支撑,运行环境多为低成本 PC Server,具有高性能和高扩展性的特点,在企业分析类应用领域获得极其广泛的应用。

这类MPP产品可以有效支撑PB级别的结构化数据分析,这是传统数据库技术无法胜任的。对于企业新一代的数据仓库和结构化数据分析,目前佳选择是MPP数据库。

第二种是基于Hadoop的技术扩展和封装,围绕Hadoop衍生出相关的大数据技术,应对传统关系型数据库较难处理的数据和场景,例如针对非结构化数据的存储和计算等,充分利用Hadoop开源的优势,伴随相关技术的不断进步,其应用场景也将逐步扩大,目前为典型的应用场景就是通过扩展和封装 Hadoop来实现对互联网大数据存储、分析的支撑。这里面有几十种NoSQL技术,也在进一步的细分。对于非结构、半结构化数据处理、复杂的ETL流程、复杂的数据挖掘和计算模型,Hadoop平台更擅长。

第三种是大数据一体机,这是一种专为大数据的分析处理而设计的软、硬件结合的产品,由一组集成的服务器、存储设备、*作系统、数据库管理系统以及为数据查询、处理、分析用途而特别预先安装及优化的软件组成,高性能大数据一体机具有良好的稳定性和纵向扩展性。

以上是小编为大家分享的关于大数据存储与应用特点及技术路线分析的相关内容,更多信息可以关注环球青藤分享更多干货

二、传统大数据存储的架构有哪些各有什么特点

数据时代,移动互联、社交网络、数据分析、云服务等应用的迅速普及,对数据中心提出革命性的需求,存储基础架构已经成为IT核心之一。政府、军队军工、科研院所、航空航天、大型商业连锁、医疗、金融、新媒体、广电等各个领域新兴应用层出不穷。数据的价值日益凸显,数据已经成为不可或缺的资产。作为数据载体和驱动力量,存储系统成为大数据基础架构中为关键的核心。

传统的数据中心无论是在性能、效率,还是在投资收益、安全,已经远远不能满足新兴应用的需求,数据中心业务急需新型大数据处理中心来支撑。除了传统的高可靠、高冗余、绿色节能之外,新型的大数据中心还需具备虚拟化、模块化、弹性扩展、自动化等一系列特征,才能满足具备大数据特征的应用需求。这些史无前例的需求,让存储系统的架构和功能都发生了前所未有的变化。

基于大数据应用需求,“应用定义存储”概念被提出。存储系统作为数据中心核心的数据基础,不再仅是传统分散的、单一的底层设备。除了要具备高性能、高安全、高可靠等特征之外,还要有虚拟化、并行分布、自动分层、弹性扩展、异构资源整合、全局缓存加速等多方面的特点,才能满足具备大数据特征的业务应用需求。

尤其在云安防概念被热炒的时代,随着高清技术的普及,720P、1080P随处可见,智能和高清的双向需求、动辄500W、800W甚至上千万更高分辨率的摄像机面市,大数据对存储设备的容量、读写性能、可靠性、扩展性等都提出了更高的要求,需要充分考虑功能集成度、数据安全性、数据稳定性,系统可扩展性、性能及成本各方面因素。

目前市场上的存储架构如下:

(1)基于嵌入式架构的存储系统

节点NVR架构主要面向小型高清监控系统,高清前端数量一般在几十路以内。系统建设中没有大型的存储监控中心机房,存储容量相对较小,用户体验度、系统功能集成度要求较高。在市场应用层面,超市、店铺、小型企业、政法行业中基本管理单元等应用较为广泛。

(2)基于X86架构的存储系统

平台SAN架构主要面向中大型高清监控系统,前端路数成百上千甚至上万。一般多采用IPSAN或FCSAN搭建高清视频存储系统。作为监控平台的重要组成部分,前端监控数据通过录像存储管理模块存储到SAN中。

此种架构接入高清前端路数相对节点NVR有了较高提升,具备快捷便利的可扩展性,技术成熟。对于IPSAN而言,虽然在ISCSI环节数据并发读写传输速率有所消耗,但其凭借扩展性良好、硬件平台通用、海量数据可充分共享等优点,仍然得到很多客户的青睐。FCSAN在行业用户、封闭存储系统中应用较多,比如县级或地级市高清监控项目,大数据量的并发读写对千兆网络交换提出了较大的挑战,但应用FCSAN构建相对独立的存储子系统,可以有效解决上述问题。

面对视频监控系统大文件、随机读写的特点,平台SAN架构系统不同存储单元之间的数据共享冗余方面还有待提高;从高性能服务器转发视频数据到存储空间的策略,从系统架构而言也增加了隐患故障点、ISCSI带宽瓶颈导致无法充分利用硬件数据并发性能、接入前端数据较少。上述问题催生了平台NVR架构解决方案。

该方案在系统架构上省去了存储服务器,消除了上文提到的性能瓶颈和单点故障隐患。大幅度提高存储系统的写入和检索速度;同时也彻底消除了传统文件系统由于供电和网络的不稳定带来的文件系统损坏等问题。

平台NVR中存储的数据可同时供多个客户端随时查询,点播,当用户需要查看多个已保存的视频监控数据时,可通过授权的视频监控客户端直接查询并点播相应位置的视频监控数据进行历史图像的查看。由于数据管理服务器具有监控系统所有监控点的录像文件的索引,因此通过平台CMS授权,视频监控客户端可以查询并点播整个监控系统上所有监控点的数据,这个过程对用户而言也是透明的。

(3)基于云技术的存储方案

当前,安防行业可谓“云”山“物”罩。随着视频监控的高清化和网络化,存储和管理的视频数据量已有海量之势,云存储技术是突破IP高清监控存储瓶颈的重要手段。云存储作为一种服务,在未来安防监控行业有着可观的应用前景。

与传统存储设备不同,云存储不仅是一个硬件,而是一个由网络设备、存储设备、服务器、软件、接入网络、用户访问接口以及客户端程序等多个部分构成的复杂系统。该系统以存储设备为核心,通过应用层软件对外提供数据存储和业务服务。

一般分为存储层、基础管理层、应用接口层以及访问层。存储层是云存储系统的基础,由存储设备(满足FC协议、iSCSI协议、NAS协议等)构成。基础管理层是云存储系统的核心,其担负着存储设备间协同工作,数据加密,分发以及容灾备份等工作。应用接口层是系统中根据用户需求来开发的部分,根据不同的业务类型,可以开发出不同的应用服务接口。访问层指授权用户通过应用接口来登录、享受云服务。其主要优势在于:硬件冗余、节能环保、系统升级不会影响存储服务、海量并行扩容、强大的负载均衡功能、统一管理、统一向外提供服务,管理效率高,云存储系统从系统架构、文件结构、高速缓存等方面入手,针对监控应用进行了优化设计。数据传输可采用流方式,底层采用突破传统文件系统限制的流媒体数据结构,大幅提高了系统性能。

高清监控存储是一种大码流多并发写为主的存储应用,对性能、并发性和稳定性等方面有很高的要求。该存储解决方案采用独特的大缓存顺序化算法,把多路随机并发访问变为顺序访问,解决了硬盘磁头因频繁寻道而导致的性能迅速下降和硬盘寿命缩短的问题。

针对系统中会产生PB级海量监控数据,存储设备的数量达数十台上百台,因此管理方式的科学高效显得十分重要。云存储可提供基于集群管理技术的多设备集中管理工具,具有设备集中监控、集群管理、系统软硬件运行状态的监控、主动报警,图像化系统检测等功能。在海量视频存储检索应用中,检索性能尤为重要。传统文件系统中,文件检索采用的是“目录-》子目录-》文件-》定位”的检索步骤,在海量数据的高清视频监控,目录和文件数量十分可观,这种检索模式的效率就会大打折扣。采用序号文件定位可以有效解决该问题。

云存储可以提供非常高的的系统冗余和安全性。当**存储系统出现故障后,热备机可以立即接替服务,当故障恢复时,服务和数据回迁;若故障机数据需要调用,可以将故障机的磁盘插入到冷备机中,实现所有数据的立即可用。

对于高清监控系统,随着监控前端的增加和存储时间的延长,扩展能力十分重要。市场中已有友商可提供单纯针对容量的扩展柜扩展模式和性能容量同步线性扩展的堆叠扩展模式。

云存储系统除上述优点之外,在平台对接整合、业务流程梳理、视频数据智能分析深度挖掘及成本方面都将面临挑战。承建大型系统、构建云存储的商业模式也亟待创新。受限于宽带网络、web2.0技术、应用存储技术、文件系统、P2P、数据压缩、CDN技术、虚拟化技术等的发展,未来云存储还有很长的路要走。

三、五种大数据处理架构

五种大数据处理架构

大数据是收集、整理、处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称。虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性、规模,以及价值在近几年才经历了大规模扩展。

本文将介绍大数据系统一个基本的组件:处理框架。处理框架负责对系统中的数据进行计算,例如处理从非易失存储中读取的数据,或处理刚刚摄入到系统中的数据。数据的计算则是指从大量单一数据点中提取信息和见解的过程。

下文将介绍这些框架:

·仅批处理框架:

Apache Hadoop

·仅流处理框架:

Apache Storm

Apache Samza

·混合框架:

Apache Spark

Apache Flink

大数据处理框架是什么?

处理框架和处理引擎负责对数据系统中的数据进行计算。虽然“引擎”和“框架”之间的区别没有什么权威的定义,但大部分时候可以将前者定义为实际负责处理数据*作的组件,后者则可定义为承担类似作用的一系列组件。

例如Apache Hadoop可以看作一种以MapReduce作为默认处理引擎的处理框架。引擎和框架通常可以相互替换或同时使用。例如另一个框架Apache Spark可以纳入Hadoop并取代MapReduce。组件之间的这种互*作性是大数据系统灵活性如此之高的原因之一。

虽然负责处理生命周期内这一阶段数据的系统通常都很复杂,但从广义层面来看它们的目标是非常一致的:通过对数据执行*作提高理解能力,揭示出数据蕴含的模式,并针对复杂互动获得见解。

为了简化这些组件的讨论,我们会通过不同处理框架的设计意图,按照所处理的数据状态对其进行分类。一些系统可以用批处理方式处理数据,一些系统可以用流方式处理连续不断流入系统的数据。此外还有一些系统可以同时处理这两类数据。

在深入介绍不同实现的指标和结论之前,首先需要对不同处理类型的概念进行一个简单的介绍。

批处理系统

批处理在大数据世界有着悠久的历史。批处理主要*作大容量静态数据集,并在计算过程完成后返回结果。

批处理模式中使用的数据集通常符合下列特征…

·有界:批处理数据集代表数据的有限**

·持久:数据通常始终存储在某种类型的持久存储位置中

·大量:批处理*作通常是处理极为海量数据集的唯一方法

批处理非常适合需要访问全套记录才能完成的计算工作。例如在计算总数和平均数时,必须将数据集作为一个整体加以处理,而不能将其视作多条记录的**。这些*作要求在计算进行过程中数据维持自己的状态。

需要处理大量数据的任务通常适合用批处理*作进行处理。无论直接从持久存储设备处理数据集,或首先将数据集载入内存,批处理系统在设计过程中就充分考虑了数据的量,可提供充足的处理资源。由于批处理在应对大量持久数据方面的表现极为出色,因此经常被用于对历史数据进行分析。

大量数据的处理需要付出大量时间,因此批处理不适合对处理时间要求较高的场合。

Apache Hadoop

Apache Hadoop是一种专用于批处理的处理框架。Hadoop是首个在开源社区获得极大关注的大数据框架。基于谷歌有关海量数据处理所发表的多篇论文与经验的Hadoop重新实现了相关算法和组件堆栈,让大规模批处理技术变得更易用。

新版Hadoop包含多个组件,即多个层,通过配合使用可处理批数据:

· HDFS:HDFS是一种分布式文件系统层,可对集群节点间的存储和**进行协调。HDFS确保了无法避免的节点故障发生后数据依然可用,可将其用作数据来源,可用于存储中间态的处理结果,并可存储计算的终结果。

· YARN:YARN是Yet Another Resource Negotiator(另一个资源管理器)的缩写,可充当Hadoop堆栈的集群协调组件。该组件负责协调并管理底层资源和调度作业的运行。通过充当集群资源的接口,YARN使得用户能在Hadoop集群中使用比以往的迭代方式运行更多类型的工作负载。

· MapReduce:MapReduce是Hadoop的原生批处理引擎。

批处理模式

Hadoop的处理功能来自MapReduce引擎。MapReduce的处理技术符合使用键值对的map、shuffle、reduce算法要求。基本处理过程包括:

·从HDFS文件系统读取数据集

·将数据集拆分成小块并分配给所有可用节点

·针对每个节点上的数据子集进行计算(计算的中间态结果会重新写入HDFS)

·重新分配中间态结果并按照键进行分组

·通过对每个节点计算的结果进行汇总和组合对每个键的值进行“Reducing”

·将计算而来的终结果重新写入 HDFS

优势和局限

由于这种方法严重依赖持久存储,每个任务需要多次执行读取和写入*作,因此速度相对较慢。但另一方面由于磁盘空间通常是服务器上丰富的资源,这意味着MapReduce可以处理非常海量的数据集。同时也意味着相比其他类似技术,Hadoop的MapReduce通常可以在廉价硬件上运行,因为该技术并不需要将一切都存储在内存中。MapReduce具备极高的缩放潜力,生产环境中曾经出现过包含数万个节点的应用。

MapReduce的学习曲线较为陡峭,虽然Hadoop生态系统的其他周边技术可以大幅降低这一问题的影响,但通过Hadoop集群快速实现某些应用时依然需要注意这个问题。

围绕Hadoop已经形成了辽阔的生态系统,Hadoop集群本身也经常被用作其他软件的组成部件。很多其他处理框架和引擎通过与Hadoop集成也可以使用HDFS和YARN资源管理器。

总结

Apache Hadoop及其MapReduce处理引擎提供了一套久经考验的批处理模型,适合处理对时间要求不高的非常大规模数据集。通过非常低成本的组件即可搭建完整功能的Hadoop集群,使得这一廉价且高效的处理技术可以灵活应用在很多案例中。与其他框架和引擎的兼容与集成能力使得Hadoop可以成为使用不同技术的多种工作负载处理平台的底层基础。

流处理系统

流处理系统会对随时进入系统的数据进行计算。相比批处理模式,这是一种截然不同的处理方式。流处理方式无需针对整个数据集执行*作,而是对通过系统传输的每个数据项执行*作。

·流处理中的数据集是“无边界”的,这就产生了几个重要的影响:

·完整数据集只能代表截至目前已经进入到系统中的数据总量。

·工作数据集也许更相关,在特定时间只能代表某个单一数据项。

处理工作是基于**的,除非明确停止否则没有“尽头”。处理结果立刻可用,并会随着新数据的抵达继续更新。

流处理系统可以处理几乎无**的数据,但同一时间只能处理一条(真正的流处理)或很少量(微批处理,Micro-batch Processing)数据,不同记录间只维持少量的状态。虽然大部分系统提供了用于维持某些状态的方法,但流处理主要针对副作用更少,更加功能性的处理(Functional processing)进行优化。

功能性*作主要侧重于状态或副作用有限的离散步骤。针对同一个数据执行同一个*作会或略其他因素产生相同的结果,此类处理非常适合流处理,因为不同项的状态通常是某些困难、限制,以及某些情况下不需要的结果的结合体。因此虽然某些类型的状态管理通常是可行的,但这些框架通常在不具备状态管理机制时更简单也更高效。

此类处理非常适合某些类型的工作负载。有近实时处理需求的任务很适合使用流处理模式。分析、服务器或应用程序错误日志,以及其他基于时间的衡量指标是适合的类型,因为对这些领域的数据变化做出响应对于业务职能来说是极为关键的。流处理很适合用来处理必须对变动或峰值做出响应,并且关注一段时间内变化趋势的数据。

Apache Storm

Apache Storm是一种侧重于极低延迟的流处理框架,也许是要求近实时处理的工作负载的佳选择。该技术可处理非常大量的数据,通过比其他解决方案更低的延迟提供结果。

流处理模式

Storm的流处理可对框架中名为Topology(拓扑)的DAG(Directed Acyclic Graph,有向无环图)进行编排。这些拓扑描述了当数据片段进入系统后,需要对每个传入的片段执行的不同转换或步骤。

拓扑包含:

· Stream:普通的数据流,这是一种会持续抵达系统的无边界数据。

· Spout:位于拓扑边缘的数据流来源,例如可以是API或查询等,从这里可以产生待处理的数据。

· Bolt:Bolt代表需要消耗流数据,对其应用*作,并将结果以流的形式进行输出的处理步骤。Bolt需要与每个Spout建立连接,随后相互连接以组成所有必要的处理。在拓扑的尾部,可以使用终的Bolt输出作为相互连接的其他系统的输入。

Storm背后的想法是使用上述组件定义大量小型的离散*作,随后将多个组件组成所需拓扑。默认情况下Storm提供了“至少一次”的处理保证,这意味着可以确保每条消息至少可以被处理一次,但某些情况下如果遇到失败可能会处理多次。Storm无法确保可以按照特定顺序处理消息。

为了实现严格的一次处理,即有状态处理,可以使用一种名为Trident的抽象。严格来说不使用Trident的Storm通常可称之为Core Storm。Trident会对Storm的处理能力产生极大影响,会增加延迟,为处理提供状态,使用微批模式代替逐项处理的纯粹流处理模式。

为避免这些问题,通常建议Storm用户尽可能使用Core Storm。然而也要注意,Trident对内容严格的一次处理保证在某些情况下也比较有用,例如系统无法智能地处理重复消息时。如果需要在项之间维持状态,例如想要计算一个小时内有多少用户点击了某个链接,此时Trident将是你唯一的选择。尽管不能充分发挥框架与生俱来的优势,但Trident提高了Storm的灵活性。

Trident拓扑包含:

·流批(Stream batch):这是指流数据的微批,可通过分块提供批处理语义。

·*作(Operation):是指可以对数据执行的批处理过程。

优势和局限

目前来说Storm可能是近实时处理领域的佳解决方案。该技术可以用极低延迟处理数据,可用于希望获得低延迟的工作负载。如果处理速度直接影响用户体验,例如需要将处理结果直接提供给访客打开的网站页面,此时Storm将会是一个很好的选择。

Storm与Trident配合使得用户可以用微批代替纯粹的流处理。虽然借此用户可以获得更大灵活性打造更符合要求的工具,但同时这种做**削弱该技术相比其他解决方案大的优势。话虽如此,但多一种流处理方式总是好的。

Core Storm无法保证消息的处理顺序。Core Storm为消息提供了“至少一次”的处理保证,这意味着可以保证每条消息都能被处理,但也可能发生重复。Trident提供了严格的一次处理保证,可以在不同批之间提供顺序处理,但无法在一个批内部实现顺序处理。

在互*作性方面,Storm可与Hadoop的YARN资源管理器进行集成,因此可以很方便地融入现有Hadoop部署。除了支持大部分处理框架,Storm还可支持多种语言,为用户的拓扑定义提供了更多选择。

总结

对于延迟需求很高的纯粹的流处理工作负载,Storm可能是适合的技术。该技术可以保证每条消息都被处理,可配合多种编程语言使用。由于Storm无法进行批处理,如果需要这些能力可能还需要使用其他软件。如果对严格的一次处理保证有比较高的要求,此时可考虑使用Trident。不过这种情况下其他流处理框架也许更适合。

Apache Samza

Apache Samza是一种与Apache Kafka消息系统紧密绑定的流处理框架。虽然Kafka可用于很多流处理系统,但按照设计,Samza可以更好地发挥Kafka独特的架构优势和保障。该技术可通过Kafka提供容错、缓冲,以及状态存储。

Samza可使用YARN作为资源管理器。这意味着默认情况下需要具备Hadoop集群(至少具备HDFS和YARN),但同时也意味着Samza可以直接使用YARN丰富的内建功能。

流处理模式

Samza依赖Kafka的语义定义流的处理方式。Kafka在处理数据时涉及下列概念:

· Topic(话题):进入Kafka系统的每个数据流可称之为一个话题。话题基本上是一种可供消耗方订阅的,由相关信息组成的数据流。

· Partition(分区):为了将一个话题分散至多个节点,Kafka会将传入的消息划分为多个分区。分区的划分将基于键(Key)进行,这样可以保证包含同一个键的每条消息可以划分至同一个分区。分区的顺序可获得保证。

· Broker(代理):组成Kafka集群的每个节点也叫做代理。

· Producer(生成方):任何向Kafka话题写入数据的组件可以叫做生成方。生成方可提供将话题划分为分区所需的键。

· Consumer(消耗方):任何从Kafka读取话题的组件可叫做消耗方。消耗方需要负责维持有关自己分支的信息,这样即可在失败后知道哪些记录已经被处理过了。

由于Kafka相当于永恒不变的日志,Samza也需要处理永恒不变的数据流。这意味着任何转换创建的新数据流都可被其他组件所使用,而不会对初的数据流产生影响。

优势和局限

乍看之下,Samza对Kafka类查询系统的依赖似乎是一种限制,然而这也可以为系统提供一些独特的保证和功能,这些内容也是其他流处理系统不具备的。

例如Kafka已经提供了可以通过低延迟方式访问的数据存储副本,此外还可以为每个数据分区提供非常易用且低成本的多订阅者模型。所有输出内容,包括中间态的结果都可写入到Kafka,并可被下游步骤独立使用。

这种对Kafka的紧密依赖在很多方面类似于MapReduce引擎对HDFS的依赖。虽然在批处理的每个计算之间对HDFS的依赖导致了一些严重的性能问题,但也避免了流处理遇到的很多其他问题。

Samza与Kafka之间紧密的关系使得处理步骤本身可以非常松散地耦合在一起。无需事先协调,即可在输出的任何步骤中增加任意数量的订阅者,对于有多个团队需要访问类似数据的组织,这一特性非常有用。多个团队可以全部订阅进入系统的数据话题,或任意订阅其他团队对数据进行过某些处理后创建的话题。这一切并不会对数据库等负载密集型基础架构造成额外的压力。

直接写入Kafka还可避免回压(Backpressure)问题。回压是指当负载峰值导致数据流入速度超过组件实时处理能力的情况,这种情况可能导致处理工作停顿并可能丢失数据。按照设计,Kafka可以将数据保存很长时间,这意味着组件可以在方便的时候继续进行处理,并可直接重启动而无需担心造成任何后果。

Samza可以使用以本地键值存储方式实现的容错检查点系统存储数据。这样Samza即可获得“至少一次”的交付保障,但面对由于数据可能多次交付造成的失败,该技术无法对汇总后状态(例如计数)提供精确恢复。

Samza提供的高级抽象使其在很多方面比Storm等系统提供的基元(Primitive)更易于配合使用。目前Samza只支持JVM语言,这意味着它在语言支持方面不如Storm灵活。

总结

对于已经具备或易于实现Hadoop和Kafka的环境,Apache Samza是流处理工作负载一个很好的选择。Samza本身很适合有多个团队需要使用(但相互之间并不一定紧密协调)不同处理阶段的多个数据流的组织。Samza可大幅简化很多流处理工作,可实现低延迟的性能。如果部署需求与当前系统不兼容,也许并不适合使用,但如果需要极低延迟的处理,或对严格的一次处理语义有较高需求,此时依然适合考虑。

混合处理系统:批处理和流处理

一些处理框架可同时处理批处理和流处理工作负载。这些框架可以用相同或相关的组件和API处理两种类型的数据,借此让不同的处理需求得以简化。

如你所见,这一特性主要是由Spark和Flink实现的,下文将介绍这两种框架。实现这样的功能重点在于两种不同处理模式如何进行统一,以及要对固定和不固定数据集之间的关系进行何种假设。

虽然侧重于某一种处理类型的项目会更好地满足具体用例的要求,但混合框架意在提供一种数据处理的通用解决方案。这种框架不仅可以提供处理数据所需的方法,而且提供了自己的集成项、库、工具,可胜任图形分析、机器学习、交互式查询等多种任务。

Apache Spark

Apache Spark是一种包含流处理能力的下一代批处理框架。与Hadoop的MapReduce引擎基于各种相同原则开发而来的Spark主要侧重于通过完善的内存计算和处理优化机制加快批处理工作负载的运行速度。

Spark可作为独立集群部署(需要相应存储层的配合),或可与Hadoop集成并取代MapReduce引擎。

批处理模式

与MapReduce不同,Spark的数据处理工作全部在内存中进行,只在一开始将数据读入内存,以及将终结果持久存储时需要与存储层交互。所有中间态的处理结果均存储在内存中。

虽然内存中处理方式可大幅改善性能,Spark在处理与磁盘有关的任务时速度也有很大提升,因为通过提前对整个任务集进行分析可以实现更完善的整体式优化。为此Spark可创建代表所需执行的全部*作,需要*作的数据,以及*作和数据之间关系的Directed Acyclic Graph(有向无环图),即DAG,借此处理器可以对任务进行更智能的协调。

为了实现内存中批计算,Spark会使用一种名为Resilient Distributed Dataset(弹性分布式数据集),即RDD的模型来处理数据。这是一种代表数据集,只位于内存中,永恒不变的结构。针对RDD执行的*作可生成新的RDD。每个RDD可通过世系(Lineage)回溯至父级RDD,并终回溯至磁盘上的数据。Spark可通过RDD在无需将每个*作的结果写回磁盘的前提下实现容错。

流处理模式

流处理能力是由Spark Streaming实现的。Spark本身在设计上主要面向批处理工作负载,为了弥补引擎设计和流处理工作负载特征方面的差异,Spark实现了一种叫做微批(Micro-batch)*的概念。在具体策略方面该技术可以将数据流视作一系列非常小的“批”,借此即可通过批处理引擎的原生语义进行处理。

Spark Streaming会以亚秒级增量对流进行缓冲,随后这些缓冲会作为小规模的固定数据集进行批处理。这种方式的实际效果非常好,但相比真正的流处理框架在性能方面依然存在不足。

优势和局限

使用Spark而非Hadoop MapReduce的主要原因是速度。在内存计算策略和先进的DAG调度等机制的帮助下,Spark可以用更快速度处理相同的数据集。

Spark的另一个重要优势在于多样性。该产品可作为独立集群部署,或与现有Hadoop集群集成。该产品可运行批处理和流处理,运行一个集群即可处理不同类型的任务。

除了引擎自身的能力外,围绕Spark还建立了包含各种库的生态系统,可为机器学习、交互式查询等任务提供更好的支持。相比MapReduce,Spark任务更是“众所周知”地易于编写,因此可大幅提高生产力。

为流处理系统采用批处理的方法,需要对进入系统的数据进行缓冲。缓冲机制使得该技术可以处理非常大量的传入数据,提高整体吞吐率,但等待缓冲区清空也会导致延迟增高。这意味着Spark Streaming可能不适合处理对延迟有较高要求的工作负载。

由于内存通常比磁盘空间更贵,因此相比基于磁盘的系统,Spark成本更高。然而处理速度的提升意味着可以更快速完成任务,在需要按照小时数为资源付费的环境中,这一特性通常可以抵消增加的成本。

Spark内存计算这一设计的另一个后果是,如果部署在共享的集群中可能会遇到资源不足的问题。相比HadoopMapReduce,Spark的资源消耗更大,可能会对需要在同一时间使用集群的其他任务产生影响。从本质来看,Spark更不适合与Hadoop堆栈的其他组件共存一处。

总结

Spark是多样化工作负载处理任务的佳选择。Spark批处理能力以更高内存占用为代价提供了无与伦比的速度优势。对于重视吞吐率而非延迟的工作负载,则比较适合使用Spark Streaming作为流处理解决方案。

Apache Flink

Apache Flink是一种可以处理批处理任务的流处理框架。该技术可将批处理数据视作具备有限边界的数据流,借此将批处理任务作为流处理的子集加以处理。为所有处理任务采取流处理为先的方**产生一系列有趣的副作用。

这种流处理为先的方法也叫做Kappa架构,与之相对的是更加被广为人知的Lambda架构(该架构中使用批处理作为主要处理方法,使用流作为补充并提供早期未经提炼的结果)。Kappa架构中会对一切进行流处理,借此对模型进行简化,而这一切是在近流处理引擎逐渐成熟后才可行的。

流处理模型

Flink的流处理模型在处理传入数据时会将每一项视作真正的数据流。Flink提供的DataStream API可用于处理无尽的数据流。Flink可配合使用的基本组件包括:

· Stream(流)是指在系统中流转的,永恒不变的无边界数据集

· Operator(*作方)是指针对数据流执行*作以产生其他数据流的功能

· Source(源)是指数据流进入系统的入口点

· Sink(槽)是指数据流离开Flink系统后进入到的位置,槽可以是数据库或到其他系统的连接器

为了在计算过程中遇到问题后能够恢复,流处理任务会在预定时间点创建快照。为了实现状态存储,Flink可配合多种状态后端系统使用,具体取决于所需实现的复杂度和持久性级别。

此外Flink的流处理能力还可以理解“**时间”这一概念,这是指**实际发生的时间,此外该功能还可以处理会话。这意味着可以通过某种有趣的方式确保执行顺序和分组。

批处理模型

Flink的批处理模型在很大程度上仅仅是对流处理模型的扩展。此时模型不再从持续流中读取数据,而是从持久存储中以流的形式读取有边界的数据集。Flink会对这些处理模型使用完全相同的运行时。

Flink可以对批处理工作负载实现一定的优化。例如由于批处理*作可通过持久存储加以支持,Flink可以不对批处理工作负载创建快照。数据依然可以恢复,但常规处理*作可以执行得更快。

另一个优化是对批处理任务进行分解,这样即可在需要的时候调用不同阶段和组件。借此Flink可以与集群的其他用户更好地共存。对任务提前进行分析使得Flink可以查看需要执行的所有*作、数据集的大小,以及下游需要执行的*作步骤,借此实现进一步的优化。

优势和局限

Flink目前是处理框架领域一个独特的技术。虽然Spark也可以执行批处理和流处理,但Spark的流处理采取的微批架构使其无法适用于很多用例。Flink流处理为先的方法可提供低延迟,高吞吐率,近乎逐项处理的能力。

Flink的很多组件是自行管理的。虽然这种做法较为罕见,但出于性能方面的原因,该技术可自行管理内存,无需依赖原生的Java垃圾回收机制。与Spark不同,待处理数据的特征发生变化后Flink无需手工优化和调整,并且该技术也可以自行处理数据分区和自动缓存等*作。

Flink会通过多种方式对工作进行分许进而优化任务。这种分析在部分程度上类似于SQL查询规划器对关系型数据库所做的优化,可针对特定任务确定高效的实现方法。该技术还支持多阶段并行执行,同时可将受阻任务的数据**在一起。对于迭代式任务,出于性能方面的考虑,Flink会尝试在存储数据的节点上执行相应的计算任务。此外还可进行“增量迭代”,或仅对数据中有改动的部分进行迭代。

在用户工具方面,Flink提供了基于Web的调度视图,借此可轻松管理任务并查看系统状态。用户也可以查看已提交任务的优化方案,借此了解任务终是如何在集群中实现的。对于分析类任务,Flink提供了类似SQL的查询,图形化处理,以及机器学习库,此外还支持内存计算。

Flink能很好地与其他组件配合使用。如果配合Hadoop堆栈使用,该技术可以很好地融入整个环境,在任何时候都只占用必要的资源。该技术可轻松地与YARN、HDFS和Kafka集成。在兼容包的帮助下,Flink还可以运行为其他处理框架,例如Hadoop和Storm编写的任务。

目前Flink大的局限之一在于这依然是一个非常“年幼”的项目。现实环境中该项目的大规模部署尚不如其他处理框架那么常见,对于Flink在缩放能力方面的局限目前也没有较为深入的研究。随着快速开发周期的推进和兼容包等功能的完善,当越来越多的组织开始尝试时,可能会出现越来越多的Flink部署

总结

Flink提供了低延迟流处理,同时可支持传统的批处理任务。Flink也许适合有极高流处理需求,并有少量批处理任务的组织。该技术可兼容原生Storm和Hadoop程序,可在YARN管理的集群上运行,因此可以很方便地进行评估。快速进展的开发工作使其值得被大家关注。

结论

大数据系统可使用多种处理技术。

对于仅需要批处理的工作负载,如果对时间不敏感,比其他解决方案实现成本更低的Hadoop将会是一个好选择。

对于仅需要流处理的工作负载,Storm可支持更广泛的语言并实现极低延迟的处理,但默认配置可能产生重复结果并且无法保证顺序。Samza与YARN和Kafka紧密集成可提供更大灵活性,更易用的多团队使用,以及更简单的**和状态管理。

对于混合型工作负载,Spark可提供高速批处理和微批处理模式的流处理。该技术的支持更完善,具备各种集成库和工具,可实现灵活的集成。Flink提供了真正的流处理并具备批处理能力,通过深度优化可运行针对其他平台编写的任务,提供低延迟的处理,但实际应用方面还为时过早。

适合的解决方案主要取决于待处理数据的状态,对处理所需时间的需求,以及希望得到的结果。具体是使用全功能解决方案或主要侧重于某种项目的解决方案,这个问题需要慎重权衡。随着逐渐成熟并被广泛接受,在评估任何新出现的创新型解决方案时都需要考虑类似的问题。

相关文章

SHARP夏普质量测评好不好

SHARP夏普质量测评好不好

很多小伙伴在关注SHARP夏普怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

康佳电视75N66怎么样?质量测评好不好用?

康佳电视75N66怎么样?质量测评好不好用?

很多小伙伴在关注康佳电视75N66怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

Vidda海信电视Vidda58英寸液晶电视智慧屏好不好用

Vidda海信电视Vidda58英寸液晶电视智慧屏好不好用

很多小伙伴在关注Vidda海信电视Vidda58英寸液晶电视智慧屏怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的...

海信电视75英寸4K超清口碑怎么样

海信电视75英寸4K超清口碑怎么样

很多小伙伴在关注海信电视75英寸4K超清怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

Apple苹果耳机有线原装线控手机耳机13/14耳塞入耳式XR有线耳机耳麦iPhone12ProMax/11/SE/8p/earpods质量好吗

Apple苹果耳机有线原装线控手机耳机13/14耳塞入耳式XR有线耳机耳麦iPhone12ProMax/11/SE/8p/earpods质量好吗

很多小伙伴在关注Apple苹果耳机有线原装线控手机耳机13/14耳塞入耳式XR有线耳机耳麦iPhone12ProMax/11/SE/8p/earpods怎么样?质量好不好?...

小白D1接入米家APP智能可视门铃无线电子猫眼1080P高清摄像头家用监控器持久续航手机远程查看怎么样?质量测评好不好用?

小白D1接入米家APP智能可视门铃无线电子猫眼1080P高清摄像头家用监控器持久续航手机远程查看怎么样?质量测评好不好用?

很多小伙伴在关注小白D1接入米家APP智能可视门铃无线电子猫眼1080P高清摄像头家用监控器持久续航手机远程查看怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用...