许多分布式计算系统都可以实时或接近实时地处理大数据流。本文将对三种Apache框架分别进行简单介绍,然后尝试快速、高度概述其异同。
Apache Storm
在Storm中,先要设计一个用于实时计算的图状结构,我们称之为拓扑(topology)。这个拓扑将会被提交给集群,由集群中的主控节点(master node)分发代码,将任务分配给工作节点(worker node)执行。一个拓扑中包括spout和bolt两种角色,其中spout发送消息,负责将数据流以tuple元组的形式发送出去;而bolt则负责转换这些数据流,在bolt中可以完成计算、过滤等操作,bolt自身也可以随机将数据发送给其他bolt。由spout发射出的tuple是不可变数组,对应着固定的键值对。
Apache Spark
Spark Streaming是核心Spark API的一个扩展,它并不会像Storm那样一次一个地处理数据流,而是在处理前按时间间隔预先将其切分为一段一段的批处理作业。Spark针对持续性数据流的抽象称为DStream(DiscretizedStream),一个DStream是一个微批处理(micro-batching)的RDD(弹性分布式数据集);而RDD则是一种分布式数据集,能够以两种方式并行运作,分别是任意函数和滑动窗口数据的转换。
Apache Samza
Samza处理数据流时,会分别按次处理每条收到的消息。Samza的流单位既不是元组,也不是Dstream,而是一条条消息。在Samza中,数据流被切分开来,每个部分都由一组只读消息的有序数列构成,而这些消息每条都有一个特定的ID(offset)。该系统还支持批处理,即逐次处理同一个数据流分区的多条消息。Samza的执行与数据流模块都是可插拔式的,尽管Samza的特色是依赖Hadoop的Yarn(另一种资源调度器)和Apache Kafka。
共同之处
以上三种实时计算系统都是开源的分布式系统,具有低延迟、可扩展和容错性诸多优点,它们的共同特色在于:允许你在运行数据流代码时,将任务分配到一系列具有容错能力的计算机上并行运行。此外,它们都提供了简单的API来简化底层实现的复杂程度。
三种框架的术语名词不同,但是其代表的概念十分相似:
对比图
下面表格总结了一些不同之处:
数据传递形式分为三大类:
- 最多一次(At-most-once):消息可能会丢失,这通常是最不理想的结果。
- 最少一次(At-least-once):消息可能会再次发送(没有丢失的情况,但是会产生冗余)。在许多用例中已经足够。
- 恰好一次(Exactly-once):每条消息都被发送过一次且仅仅一次(没有丢失,没有冗余)。这是最佳情况,尽管很难保证在所有用例中都实现。
另一个方面是状态管理:对状态的存储有不同的策略,Spark Streaming将数据写入分布式文件系统中(例如HDFS);Samza使用嵌入式键值存储;而在Storm中,或者将状态管理滚动至应用层面,或者使用更高层面的抽象Trident。
用例
这三种框架在处理连续性的大量实时数据时的表现均出色而高效,那么使用哪一种呢?选择时并没有什么硬性规定,最多就是几个指导方针。
如果你想要的是一个允许增量计算的高速事件处理系统,Storm会是最佳选择。它可以应对你在客户端等待结果的同时,进一步进行分布式计算的需求,使用开箱即用的分布式RPC(DRPC)就可以了。最后但同样重要的原因:Storm使用Apache Thrift,你可以用任何编程语言来编写拓扑结构。如果你需要状态持续,同时/或者达到恰好一次的传递效果,应当看看更高层面的Trdent API,它同时也提供了微批处理的方式。
使用Storm的公司有:Twitter,雅虎,Spotify还有The Weather Channel等。
说到微批处理,如果你必须有状态的计算,恰好一次的递送,并且不介意高延迟的话,那么可以考虑Spark Streaming,特别如果你还计划图形操作、机器学习或者访问SQL的话,Apache Spark的stack允许你将一些library与数据流相结合(Spark SQL,Mllib,GraphX),它们会提供便捷的一体化编程模型。尤其是数据流算法(例如:K均值流媒体)允许Spark实时决策的促进。
使用Spark的公司有:亚马逊,雅虎,NASA JPL,eBay还有百度等。
如果你有大量的状态需要处理,比如每个分区都有许多十亿位元组,那么可以选择Samza。由于Samza将存储与处理放在同一台机器上,在保持处理高效的同时,还不会额外载入内存。这种框架提供了灵活的可插拔API:它的默认execution、消息发送还有存储引擎操作都可以根据你的选择随时进行替换。此外,如果你有大量的数据流处理阶段,且分别来自不同代码库的不同团队,那么Samza的细颗粒工作特性会尤其适用,因为它们可以在影响最小化的前提下完成增加或移除的工作。
使用Samza的公司有:LinkedIn,Intuit,Metamarkets,Quantiply,Fortscale等。
结论
本文中我们只对这三种Apache框架进行了简单的了解,并未覆盖到这些框架中大量的功能与更多细微的差异。同时,文中这三种框架对比也是受到限制的,因为这些框架都在一直不断的发展,这一点是我们应当牢记的。
原文链接:Streaming Big Data: Storm, Spark and Samza (编译/孙薇 责编/周建丁 )
相关推荐
流式处理框架在大数据处理领域占据着至关重要的位置,它们为实时数据处理提供了高效、灵活的解决方案。本文将深入探讨三个流行的流处理框架——Apache Storm、Spark Streaming和Apache Samza,对比它们的设计理念、...
作为一种新兴的流处理框架,它能够让用户利用Spark的高效性和可靠性进行流数据的处理任务。对于熟悉Spark基础(Spark Core)的用户而言,Spark Streaming提供了平滑的学习曲线和强大的数据处理能力。 2. Spark ...
大数据框架对比的核心主题是分析和比较几个主流的大数据处理框架,这些框架包括Apache Hadoop、Apache Storm、Apache Samza和Apache Spark,以及Apache Flink。以下对它们的功能、架构和应用场景等知识点进行详细...
Flink与其它流处理框架如Apache Storm、Apache Heron、Apache Samza和Spark Streaming等有所区别。这些框架虽然也支持数据流的实时处理,但在性能、容错机制、数据处理准确性等方面各有优劣。Flink的性能优势在于它...
视频大数据处理设计与应用的知识点涵盖了从大数据的概念、视频数据的特点、实时处理框架的选择、人脸检测技术,到系统架构和数据处理流程等多个方面。 首先,多媒体大数据包括音频、视频和图像等多种形式,是大数据...
在大数据处理框架方面,Hadoop是最为人知的开源平台,包括HDFS(Hadoop Distributed File System)分布式文件系统和MapReduce计算模型。HDFS提供了高吞吐量的数据访问,而MapReduce则用于大规模数据的计算。然而,...
通过分析文档内容,我们得以了解实时计算在点评类网站的应用、实时计算平台的构建技术、Storm框架的介绍、保证业务可靠性的策略、流式数据处理技术、SLA的应用、Storm的消息传输机制、系统吞吐量的评估方法、幂等性...
- **Apache Samza**:基于Kafka和YARN的流处理框架,适合低延迟的流数据应用。 - **Apache Tez**:在YARN上运行复杂的DAG任务,提高了MapReduce的效率。 - **Apache Twill**:简化在YARN上开发分布式应用的复杂性...
- **流式处理框架**:Apache Kafka、Apache Flink等,用于处理大量实时数据流。 - **批处理工具**:Hadoop、Spark Streaming等,适用于处理历史数据集。 - **数据库**:MongoDB、Cassandra等NoSQL数据库,提供...
2. 数据实时流式计算技术:面对传感器可能产生的“无效数据”,实时流式计算如Storm、Samza、Flink和SparkStreaming等技术可处理大规模实时数据,提供低延迟处理。Flink在流计算性能上通常优于SparkStreaming。 3. ...
实时流数据处理包括各种技术,例如使用Apache Storm和Apache Samza来处理和分析流式数据。这些技术提供了分布式的实时计算能力,支持事件驱动的架构。 6. 流数据存储 存储解决方案需要能够应对实时数据分析带来的...
流式数据是指实时或接近实时处理的大数据流,常见的流式数据处理使用 Spark、Storm 和 Samza 框架。 七、使用 Python 获取运营数据 使用 Python 可以从文本文件中读取运营数据,基本步骤包括定义数据文件、获取...
- **数据存储与处理层**:包括分布式存储系统(如Hadoop、HBase)、大数据处理框架(如Spark、Flink),以及数据治理机制,确保数据的高质量。 - **数据分析与挖掘层**:利用统计学、机器学习等方法对数据进行深度...
流处理框架如Apache Spark、Storm和Samza帮助处理这些连续不断的数据流,提供实时洞察。 外部公开数据是任何人都能访问的数据,可能来自政府公开报告、社交媒体、开放数据平台等。这些数据可以为企业提供市场趋势、...
【流计算系统】在图数据流模型广泛应用之前,已经出现了几种流式计算系统,如Storm、Spark Streaming、Samza、Flink和Kafka Stream,它们在一定程度上解决了大规模复杂数据流处理的问题。这些系统提供了实时计算框架...
在实际应用中,不同的框架如Storm、Spark Streaming、Samza和Flink各有优缺点,适用于不同的业务场景。例如,Storm以其低延迟和高度灵活的容错机制在实时消息处理中占有一席之地,而Spark Streaming则因为其与Spark...