您的位置:首页 > 业界新闻

对互联网海量数据实时计算的理解 + 业界开源实时流处理系统小结 _ (技术调研参考)

2015-03-27 22:25 931 查看
对互联网海量数据实时计算的理解

1. 实时计算的概念

  互联网领域的实时计算一般都是针对海量数据进行的,除了像非实时计算的需求(如计算结果准确)以外,实时计算最重要的一个需求是能够实时响应计算结果,一般要求为秒级。个人理解,互联网行业的实时计算可以分为以下两种应用场景:

1) 数据源是实时的不间断的,要求对用户的响应时间也是实时的。

  主要用于互联网流式数据处理。所谓流式数据是指将数据看作是数据流的形式来处理。数据流则是在时间分布和数量上无限的一系列数据记录的集合体;数据记录是数据流的最小组成单元。举个例子,对于大型网站,活跃的流式数据非常常见,这些数据包括网站的访问PV/UV、用户访问了什么内容,搜索了什么内容等。实时的数据计算和分析可以动态实时地刷新用户访问数据,展示网站实时流量的变化情况,分析每天各小时的流量和用户分布情况,这对于大型网站来说具有重要的实际意义。

2) 数据量大且无法或没必要预算,但要求对用户的响应时间是实时的。

  主要用于特定场合下的数据分析处理。当数据量很大,同时发现无法穷举所有可能条件的查询组合或者大量穷举出来的条件组合无用的时候,实时计算就可以发挥作用,将计算过程推迟到查询阶段进行,但需要为用户提供实时响应[参考链接]。

2. 实时计算相关技术

  互联网上海量数据(一般为日志流)的实时计算过程可以被划分为以下三个阶段:数据的产生与收集阶段、传输与分析处理阶段、存储对对外提供服务阶段。下面分别进行简单的介绍:



2.1 数据实时采集

  需求:功能上保证可以完整的收集到所有日志数据,为实时应用提供实时数据;响应时间上要保证实时性、低延迟在1秒左右;配置简单,部署容易;系统稳定可靠等。

  目前,互联网企业的海量数据采集工具,有Facebook开源的Scribe、LinkedIn开源的Kafka、Cloudera开源的Flume,淘宝开源的TimeTunnel、Hadoop的Chukwa等,均可以满足每秒数百MB的日志数据采集和传输需求。

2.2 数据实时计算

  传统的数据操作,首先将数据采集并存储在DBMS中,然后通过query和DBMS进行交互,得到用户想要的答案。整个过程中,用户是主动的,而DBMS系统是被动的



  但是,对于现在大量存在的实时数据,比如股票交易的数据,这类数据实时性强,数据量大,没有止境,传统的架构并不合适。流计算就是专门针对这种数据类型准备的。在流数据不断变化的运动过程中实时地进行分析,捕捉到可能对用户有用的信息,并把结果发送出去。整个过程中,数据分析处理系统是主动的,而用户却是处于被动接收的状态



  需求:适应流式数据、不间断查询;系统稳定可靠、可扩展性好、可维护性好等。

  实时流计算框架:Yahoo开源的S4、Twitter开源的Storm,还有EsperStreambaseHStreaming等。

  有关计算的一些注意点:分布式计算,并行计算(节点间的并行、节点内的并行),热点数据的缓存策略,服务端计算。

2.3 实时查询服务

全内存:直接提供数据读取服务,定期dump到磁盘或数据库进行持久化。

半内存:使用Redis、Memcache、MongoDB、BerkeleyDB等内存数据库提供数据实时查询服务,由这些系统进行持久化操作。

全磁盘:使用HBase等以分布式文件系统(HDFS)为基础的NoSQL数据库,对于key-value引擎,关键是设计好key的分布。

3. 应用举例

  对于电子商务网站上的店铺:

  1)实时展示一个店铺的到访顾客流水信息,包括访问时间、访客姓名、访客地理位置、访客IP、访客正在访问的页面等信息;

  2)显示某个到访顾客的所有历史来访记录,同时实时跟踪显示某个访客在一个店铺正在访问的页面等信息;

  3)支持根据访客地理位置、访问页面、访问时间等多种维度下的实时查询与分析。

  更详细的内容,以后再进一步展开介绍。

4. 总结的话

  1)并不是任何应用都做到实时计算才是最好的。

  2)使用哪些技术和框架来搭建实时计算系统,需要根据实际业务需求进行选择。

  3)对于分布式系统来说,系统的可配置性、可维护性、可扩展性十分重要,系统调优永无止境。

5. 目前业界开源的实时流处理系统小结

        ——这里对目前业界开源的一些实时流处理系统做一次小结,作为日后进行技术调研的参考资料

S4

  S4(Simple Scalable Streaming System)是Yahoo最新发布的一个开源流计算平台,它是一个通用的、分布式的、可扩展性良好、具有分区容错能力、支持插件的分布式流计算平台,在该平台上程序员可以很方便地开发面向无界不间断流数据处理的应用,开发语言为Java

  项目链接:http://incubator.apache.org/s4/(注:S4 0.5.0已支持TCP链接及状态恢复等特性)

Storm

  Storm是Twitter开源的分布式实时计算系统,Storm通过简单的API使开发者可以可靠地处理无界持续的流数据,进行实时计算,开发语言为ClojureJava非JVM语言可以通过stdin/stdout以JSON格式协议与Storm进行通信。Storm的应用场景很多:实时分析、在线机器学习、持续计算、分布式RPC、ETL处理,等等。

  项目链接:http://storm-project.net

StreamBase

  StreamBase是一个关于复杂事件处理(CEP)、事件流处理的平台。其本身是商业应用软件,但提供了Developer Edition,开发语言为Java

  项目链接:http://www.streambase.com

HStreaming

  HStreaming构建在Hadoop之上,可以和Hadoop及其生态系统紧密结合起来提供实时流计算服务。这使得HStreaming的用户可以在同一个生态系统中分析处理大数据,开发语言为Java

  项目链接:http://www.hstreaming.com

Esper & NEsper

  Esper是专门进行复杂事件处理(CEP)的流处理平台Java版本为Esper,.Net版本为NEsper。Esper & NEsper可以方便开发者快速开发部署处理大容量消息和事件的应用系统,不论是历史的还是实时的消息。

  项目链接:http://esper.codehaus.org

Kafka

  Kafka是Linkedin于2010年12月份开源的高吞吐、基于Pub-Sub的分布式消息系统,主要用于处理活跃的流式数据,开发语言为Scala

  项目链接:http://incubator.apache.org/kafka

Scribe

  Scribe是Facebook开源的日志收集系统,开发语言为C,通过Thrift可以支持多种常用客户端语言,在Facebook内部已经得到大量的应用。它能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文件系统等)上,以便于进行集中统计分析处理。它为日志的“分布式收集,统一处理”提供了一个可扩展的,高容错的方案。Scribe通常与Hadoop结合使用,Scribe用于向HDFS中push日志,而Hadoop通过MapReduce作业进行定期处理。

  项目链接:http://github.com/facebook/scribe

Flume

  Flume是Cloudera提供的一个分布式、可靠的、高可用的日志收集系统,用于收集、聚合以及移动大量日志数据,开发语言为Java。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接收方(可定制)的能力。

  项目链接:http://incubator.apache.org/flume

6. 参考链接

1)Scribe:https://github.com/facebook/scribe

2)Kafka:http://sna-projects.com/kafka/

3)Flume:https://github.com/cloudera/flume/

4)Chukwa:http://incubator.apache.org/chukwa/

5)TimeTunnel:http://code.taobao.org/p/TimeTunnel/

6)S4:http://s4.io

7)StreamBase:http://www.streambase.com

8)HStreaming:http://www.hstreaming.com/

9)Esper:http://esper.codehaus.org/

10)Storm:http://engineering.twitter.com/2011/08/storm-is-coming-more-details-and-plans.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: