Apache storm ApacheSamza和ApacheStorm的用例有何不同?

Apache storm ApacheSamza和ApacheStorm的用例有何不同?,apache-storm,apache-samza,Apache Storm,Apache Samza,我偶然发现,它的主旨确实将Samza与Storm进行了对比,但它似乎只涉及实现细节 这两个分布式计算引擎的用例有何不同?每种工具都适合做什么工作?这里是Tony Siciliani的一篇文章,提供了Storm、Spark和Samza的用例(和架构)比较。下面还提供了指向实际用例的Apache.org链接 关于Samza和Storm的用例,他写道: 这三个框架都特别适合高效地处理连续、大量的实时数据。那么使用哪一个呢?没有硬性规定,最多只有一些一般性的指导方针 Apache Samza 如果要处

我偶然发现,它的主旨确实将Samza与Storm进行了对比,但它似乎只涉及实现细节


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

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

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

这三个框架都特别适合高效地处理连续、大量的实时数据。那么使用哪一个呢?没有硬性规定,最多只有一些一般性的指导方针

Apache Samza

如果要处理大量的状态(例如,每个分区有许多GB),Samza会在同一台机器上共同定位存储和处理,从而能够高效地处理内存中不适合的状态。该框架还通过其可插拔API提供了灵活性:其默认执行、消息传递和存储引擎都可以由您选择的替代方案替代。此外,如果您拥有来自不同团队、具有不同代码库的多个数据处理阶段,那么Samza的细粒度作业将特别适合,因为它们可以以最小的涟漪效应添加/删除

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

Samza用例列表:

阿帕奇风暴

如果您想要一个允许增量计算的高速事件处理系统,Storm就可以了。如果您还需要按需运行分布式计算,而客户机正在同步等待结果,那么您将拥有现成的分布式RPC(DRPC)。最后但并非最不重要的一点是,因为Storm使用Apache Thrift,所以您可以用任何编程语言编写拓扑。如果您需要状态持久性和/或一次交付,那么您应该查看更高级别的Trident API,它还提供微批处理

使用Storm的几家公司:Twitter、雅虎!,Spotify,天气频道


Storm用例列表:

ApacheStorm和ApacheSamza之间最大的区别在于如何流式处理数据。

ApacheStorm使用拓扑进行实时计算,并将其送入集群,在集群中,主节点将代码分发给执行它的工作节点。在拓扑结构中,数据在作为不可变的键值对集吐出数据流的喷口之间传递

以下是Apache Storm的体系结构:

ApacheSamza通过一次处理一条消息来流式处理消息。流被划分为有序序列的分区,每个分区都有一个唯一的ID。它支持批处理,通常与Hadoop的Thread和Apache Kafka一起使用

以下是Apache Samza的体系结构:

请阅读下面关于每个系统执行细节的具体方式的更多信息

用例

Apache Samza由LinkedIn创建。

一位软件工程师写道:

它在LinkedIn已经生产了几年,目前在多个数据中心的数百台机器上运行。我们最大的Samza作业是在高峰流量时段每秒处理超过1000000条消息。 使用的资源:


好吧,我已经对这些系统进行了几个月的研究,我认为它们在用例上没有太大的不同。我认为最好按照以下几点进行比较:

  • 年龄:Storm是较老的项目,也是该领域的原创项目,因此它通常更成熟,也经过了战斗考验。Samza是一个更新的第二代项目,似乎从风暴中吸取了教训
  • 卡夫卡:桑扎来自卡夫卡生态系统,非常以卡夫卡为中心。例如,文档中说它们允许插入不同的消息传递系统。。。只要它们提供与Kafka类似的分区、排序和重放语义。Storm是一个较老的系统,不太适合与卡夫卡合作
  • 复杂性:Samza,一方面是因为它对其环境做出了更强有力的假设(“只要它像卡夫卡一样工作,你可以拥有任何你喜欢的基础设施”),另一方面是因为它只是更新了一点,在某种程度上,我觉得它比Storm更简单。但Samza更简单的一个可能不太好的方式是它(故意地?)缺少Storm的拓扑概念(复杂的执行图)。如果您需要一个复杂的多级处理器,则需要将其实现为通过Kafka进行通信的独立任务。这有优点也有缺点,但Samza会为您做出选择,而Storm会为您提供更多选择
  • 状态管理:许多Storm应用程序在需要维护大量状态以处理传入元组时,需要使用Redis之类的外部存储。这种情况似乎是促使Samza设计的主要因素之一;Samza最显著的特点之一是,它为其任务提供了自己的基于本地磁盘的密钥/值存储,以便在任务需要时用于此目的

  • 谢谢你简洁的回答!然而,仍然有几个问题:(1)我是否理解Samza没有关于单个流的概念?也就是说,是否所有入站数据都集中在一起而不考虑其来源?(2) samza是面向批处理的,它擅长在相同的输入上运行多个任务,而Storm更像是一个带有多个处理步骤的“管道”或“级联”,我的理解正确吗?还是我完全没有领会你的意思?谢谢(注意,我是Samza最初的开发者之一)。这是一个卓越的