Apache Samza和Apache Storm在用例方面有何不同?

时间:2015-03-17 23:24:18

标签: apache-storm apache-samza

我偶然发现this article声称将Samza与Storm对比,但似乎只是为了解决实施细节。

这两个分布式计算引擎的用例在哪些方面有所不同?每种工具都适合做什么工作?

3 个答案:

答案 0 :(得分:42)

好吧,我几个月来一直在调查这些系统,我认为它们在用例方面并没有太大差异。我认为最好比较一下这些行:

  1. 年龄:Storm是较旧的项目,也是这个空间中的原始项目,所以它通常更成熟,经过实战考验。 Samza是一个较新的第二代项目,似乎是从Storm学到的经验教训。
  2. Kafka: Samza从卡夫卡生态系统中长大,而且非常以卡夫卡为中心。例如,文档说它们允许插入不同的消息传递系统......只要它们像Kafka那样提供类似的分区,排序和重放语义。风暴,作为一个较旧的系统,并不专门与卡夫卡合作。
  3. 复杂性: Samza,部分是因为它对其环境做出了更强有力的假设(“你可以拥有任何你喜欢的基础设施,只要它像Kafka一样”),部分因为它只是更新,让我震惊一般来说,比Storm更简单。但Samza更简单的一个可能不太好的方法是它(故意?)缺少Storm的拓扑(复杂执行图)的概念。如果您需要复杂的多阶段处理器,则需要将其实现为通过Kafka进行通信的独立任务。这既有优点也有缺点,但Samza为您做出选择,而Storm则为您提供更多选择。
  4. 状态管理:许多Storm应用程序需要使用像Redis这样的外部存储,因为它们需要维护大量状态来处理传入的元组。这种情况似乎是推动Samza设计的主要因素之一; Samza最显着的功能之一是它为自己的任务提供了自己的本地基于磁盘的键/值存储,以便在需要时用于此目的。

答案 1 :(得分:21)

Apache Storm和Apache Samza之间的最大区别在于它们如何流式传输数据来处理它。

Apache Storm使用拓扑进行实时计算,并将其提供给集群,其中主节点在执行它的工作节点之间分配代码。在拓扑中,数据在spouts之间传递,这些spout将数据流吐出为不可变的键值对集。

这是Apache Storm的架构: enter image description here

Apache Samza通过一次处理一个消息来处理消息。流被划分为有序序列的分区,其中每个分区具有唯一ID。它支持批处理,通常与Hadoop的YARN和Apache Kafka一起使用。

这是Apache Samza的架构: enter image description here

详细了解下面每个系统执行细节的具体方法。

使用案例

Apache Samza由LinkedIn创建。

软件工程师写了a post siting

它已在LinkedIn生产多年,目前在多个数据中心的数百台机器上运行。我们最大的Samza工作是在高峰时段处理超过1,000,000条每秒的消息。

使用的资源:

Storm vs. Samza Comparison

Useful Architectural References of Storm and Samza

答案 2 :(得分:10)

这是Tony Siciliani的一篇文章,它提供了Storm,Spark和Samza的用例(和架构)比较。下面还提供了Apache.org与实际用例的链接。

https://tsicilian.wordpress.com/2015/02/16/streaming-big-data-storm-spark-and-samza/

关于Samza和Storm的用例,他写道:

  

这三个框架特别适合有效处理连续,大量的实时数据。那么哪一个使用?没有严格的规则,最多只有一些一般准则。

Apache Samza

  

如果你有大量的状态可以使用(例如每个分区有几千兆字节),Samza会在同一台机器上共同定位存储和处理,从而可以有效地处理不适合内存的状态。该框架还通过其可插入API提供灵活性:其默认执行,消息传递和存储引擎均可替换为您选择的替代方案。此外,如果您拥有来自不同代码库的不同团队的大量数据处理阶段,Samza的细粒度工作将特别适合,因为它们可以添加/删除,并且具有最小的连锁反应。

     

一些使用Samza的公司:LinkedIn,Intuit,Metamarkets,Quantiply,Fortscale ......

Samza用例列表:https://cwiki.apache.org/confluence/display/SAMZA/Powered+By

Apache Storm

  

如果你想要一个允许增量计算的高速事件处理系统,Storm就可以了。如果您还需要按需运行分布式计算,而客户端同步等待结果,您将拥有开箱即用的分布式RPC(DRPC)。最后但同样重要的是,由于Storm使用Apache Thrift,您可以使用任何编程语言编写拓扑。如果您需要状态持久性和/或完全一次交付,您应该查看更高级别的Trident API,它还提供微批处理。

     

一些公司使用Storm:Twitter,Yahoo!,Spotify,The Weather Channel ......

风暴用例列表:http://storm.apache.org/documentation/Powered-By.html