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

blz*_*blz 28 apache-storm apache-samza

我偶然发现了这篇文章,声称将Samza与Storm进行了对比,但似乎只是为了解决实现细节问题.

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

Lui*_*las 42

好吧,我几个月来一直在研究这些系统,我认为它们的用例并没有太大差别.我认为最好将它们沿着这些线进行比较:

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

  • (是的,我是Samza最初的开发者之一).这是一个非常好的正确摘要.这里所涉及的一切都是我在人们问我这个问题时使用的要点. (5认同)

mpr*_*ibi 21

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

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

这是Apache Storm的架构: 在此输入图像描述

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

这是Apache Samza的架构: 在此输入图像描述

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

使用案例

Apache Samza由LinkedIn创建.

一位软件工程师写了一篇帖子:

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

使用的资源:

风暴与萨姆扎比较

Storm和Samza的有用建筑参考


Gro*_*ify 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 ......

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