如今,数据不再是最难获取的东西,难的是如何从这些海量的数据中获得我们想要了解的信息,获取其内在的价值,由于一些数据蕴含的信息具有时效性,想要及时地获取这些信息成了这些信息工作者都在竞相追求的目标,这也正是大数据实时计算越来越流行的原因。离线数据并行计算框架主要专注于批处理,但是当我们需要处理一些实时信息的时候,离线并行计算需要耗费大量的时间,无法快速得到实时分析结果。为了解决这个问题,实时计算与分析框架应运而生。
目前主流有以下三种实时计算框架。
1.Apache Storm
通常认为Hadoop定义了并行计算的原语与通用方法架构,极大程度上对大规模数据的并行批处理进行了简化,而Storm为分布式实时计算提供了一组通用原语与方法架构,可以简化实时数据并行处理的复杂性。Storm可以方便地在一组集群服务器中建立与扩展复杂的实时计算服务,因此,Storm常常用于实时处理服务,就好像Hadoop通常用于并行离线批处理一样。Storm保证实时得到的消息队列中的每个消息都会得到处理,Storm处理信息的速度要求更加快速,在一个小集群中,每秒可以处理数以百万计的消息,并且可以使用任意主流的程序开发语言来进行开发。
2.Apache Spark Streaming
Spark Streaming是核心Spark API的一个扩展,它并不会像Storm那样一次一个地处理数据流,而是在处理前按时间间隔预先将其切分为一段一段的,进行批处理作业。(www.daowen.com)
3.Apache Samza
Samza处理流式数据消息队列时,会分别按次处理消息队列中每条收到的消息。Samza的流单位是一个消息队列。在Samza中,数据流被切分开来,每个部分都由一组只读消息的有序数列构成。除此之外,该系统还支持分区数据的批处理,即逐次处理同一个数据流分区的多条消息。Samza的执行与数据流模块都是热插拔式的,尽管Samza的特色是依赖Hadoop的Yarn和Apache Kafka。
Storm、Spark Streaming和Samza三种实时计算框架都是开源的、分布式的系统,具有可扩展性和容错性高,延迟低等优点,它们相似的特点在于:允许运行数据流代码时,将任务分配到一系列具有容错能力的节点上并行运行,也都具有便捷的底层API来简化计算任务实现的复杂程度。
Storm、Spark Streaming和Samza的不同之处在于:在数据传递形式上,Storm和Samza是至少一次传递(At-least-once),没有丢失的情况,消息可能会再次发送,此情况下会产生冗余消息传递的现象,Spark是仅一次(Exactly-once)传递:每条消息都被发送过一次且仅传递一次,此种模式没有冗余;在状态存储与管理方面上,三者对状态的存储有不同的策略,Spark将数据写入分布式文件系统中,Samza使用嵌入式键值存储,而在Storm将状态管理滚动至应用层面也会使用高层抽象Trident;在开发语言方面,Storm支持大多数主流开发语言;Spark支持Scala,Java,Python;Samza只有JVM所支持的语言。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。