流式计算的历史
早在7、8年前诸如UC伯克利、斯坦福等大学就开始了对流式数据处理的研究,但是由于更多的关注于金融行业的业务场景或者互联网流量监控的业务场 景,以及当时互联网数据场景的限制,造成了研究多是基于对传统数据库处理的流式化,对流式框架本身的研究偏少。目前这样的研究逐渐没有了声音,工业界更多 的精力转向了实时数据库。
2010年Yahoo!对S4的开源,2011年Twitter对Storm的开源,改变了这个情况。以前互联网的开发人员在做一个实时应用的时 候,除了要关注应用逻辑计算处理本身,还要为了数据的实时流转、交互、分布大伤脑筋。但是现在情况却大为不同,以Storm为例,开发人员可以快速的搭建 一套健壮、易用的实时流处理框架,配合SQL产品或者NoSQL产品或者MapReduce计算平台,就可以低成本的做出很多以前很难想象的实时产品:比 如一淘数据部的量子恒道品牌旗下的多个产品就是构建在实时流处理平台上的。
流式计算的最新进展
在数据处理时间和方式上,Storm与Hadoop MapReduce基本上是两个对立面,而这两个技术具备整合可能性极大程度该归结于YARN这个集群管理层。Hortonworks当下正在致力于通过新型处理框架Tez来 提高Hive的速度,同时YARN还允许Hadoop用户 运行Spark内存处理框架。同时, 微软也在使用YARN让Hadoop更加适合机器学习用例。
此外,通过YARN,同集群上同时运行HBase、 Giraph等不同技术也成为可能。此外,集群管理技术Mesos(加州大学伯克利分校出品,现已成为Apache项目) 同样支持了类似YARN功能,尽管其不是像YARN这样与HDFS捆绑。
更多技术的整合预示Hadoop这个大数据处理平台绝不是昙花一现,同时也会让Hadoop在大数据应用程序领域获得更高的统治力。
此外,通过YARN,同集群上同时运行HBase、 Giraph等不同技术也成为可能。此外,集群管理技术Mesos(加州大学伯克利分校出品,现已成为Apache项目) 同样支持了类似YARN功能,尽管其不是像YARN这样与HDFS捆绑。
更多技术的整合预示Hadoop这个大数据处理平台绝不是昙花一现,同时也会让Hadoop在大数据应用程序领域获得更高的统治力。
Storm的特点
Storm是一个开源的分布式实时计算系统,可以简单、可靠的处理大量的数据流。被称作“实时的hadoop”。Storm有很多使用场景:如实时分析,在线机器学习,持续计算, 分布式RPC,ETL等等。Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个结点每秒可以处理 数以百万计的消息)。Storm的部署和运维都很便捷,而且更为重要的是可以使用任意编程语言来开发应用。
编程模型简单
在大数据处理方面相信大家对hadoop已经耳熟能详,基于Google Map/Reduce来实现的Hadoop为开发者提供了map、reduce原语,使并行批处理程序变得非常地简单和优美。同样,Storm也为大数据 的实时计算提供了一些简单优美的原语,这大大降低了开发并行实时处理的任务的复杂性,帮助你快速、高效的开发应用。
可扩展
在Storm集群中真正运行topology的主要有三个实体:工作进程、线程和任务。Storm集群中的每台机器上都可以运行多个工作进程,每个 工作进程又可创建多个线程,每个线程可以执行多个任务,任务是真正进行数据处理的实体,我们开发的spout、bolt就是作为一个或者多个任务的方式执 行的。因此,计算任务在多个线程、进程和服务器之间并行进行,支持灵活的水平扩展。高可靠性
Storm可以保证spout发出的每条消息都能被“完全处理”,这也是直接区别于其他实时系统的地方,如S4。spout发出的消息后续可能会触发产生成千上万条消息,可以形象的理解为一棵消息树,其中spout发出的消息为树根,Storm会跟踪 这棵消息树的处理情况,只有当这棵消息树中的所有消息都被处理了,Storm才会认为spout发出的这个消息已经被“完全处理”。如果这棵消息树中的任 何一个消息处理失败了,或者整棵消息树在限定的时间内没有“完全处理”,那么spout发出的消息就会重发。
高容错性
如果在消息处理过程中出了一些异常,Storm会重新安排这个出问题的处理单元。Storm保证一个处理单元永远运行(除非你显式杀掉这个处理单元)。当然,如果处理单元中存储了中间状态,那么当处理单元重新被Storm启动的时候,需要应用自己处理中间状态的恢复。
Storm集群和Hadoop集群表面上看很类似。Hadoop上运行的是MapReduce jobs,而在Storm上运行的是拓扑(topology);
Hadoop擅长于分布式离线批处理,而Storm设计为支持分布式实时计算;
Hadoop新的spark组件提供了在hadoop平台上运行storm的可能性
Hadoop擅长于分布式离线批处理,而Storm设计为支持分布式实时计算;
Hadoop新的spark组件提供了在hadoop平台上运行storm的可能性