我偶然发现了这篇声称将 Samza 与 Storm 进行对比的文章,但它似乎只是针对实现细节。
这两个分布式计算引擎的用例有何不同?每个工具适合什么样的工作?
我偶然发现了这篇声称将 Samza 与 Storm 进行对比的文章,但它似乎只是针对实现细节。
这两个分布式计算引擎的用例有何不同?每个工具适合什么样的工作?
好吧,几个月来我一直在研究这些系统,我认为它们在用例上并没有太大的不同。我认为最好按照以下方式比较它们:
Apache Storm 和 Apache Samza 之间的最大区别在于它们如何流式传输数据来处理它。
Apache Storm 使用拓扑进行实时计算,并将其馈送到集群中,其中主节点在执行它的工作节点之间分配代码。在拓扑中,数据在 spout 之间传递,这些 spout 将数据流作为不可变的键值对集输出。
这是 Apache Storm 的架构:
Apache Samza 通过处理一次一个传入的消息来进行流式处理。流被划分为有序序列的分区,每个分区都有一个唯一的 ID。它支持批处理,通常与 Hadoop 的 YARN 和 Apache Kafka 一起使用。
这是 Apache Samza 的架构:
在下面阅读有关每个系统执行细节的具体方式的更多信息。
用例
Apache Samza 是由 LinkedIn 创建的。
一位软件工程师写了一个帖子站点:
使用的资源:
这是 Tony Siciliani 的一篇文章,提供了 Storm、Spark 和 Samza 的用例(和架构)比较。下面还提供了指向实际用例的 Apache.org 链接。
https://tsicilian.wordpress.com/2015/02/16/streaming-big-data-storm-spark-and-samza/
关于 Samza 和 Storm 的用例,他写道:
这三个框架都特别适合高效处理连续的大量实时数据。那么使用哪一个呢?没有硬性规定,至多是一些一般性的指导方针。
阿帕奇萨姆扎
如果您需要处理大量状态(例如,每个分区有很多 GB),Samza 会将存储和处理放在同一台机器上,从而可以有效地处理无法放入内存的状态。该框架还通过其可插入的 API 提供了灵活性:其默认执行、消息传递和存储引擎都可以替换为您选择的替代方案。此外,如果您有来自不同团队的多个具有不同代码库的数据处理阶段,那么 Samza 的细粒度作业将特别适合,因为它们可以在最小的连锁反应的情况下添加/删除。
一些使用 Samza 的公司:LinkedIn、Intuit、Metamarkets、Quantiply、Fortscale……</p>
Samza 用例列表:https ://cwiki.apache.org/confluence/display/SAMZA/Powered+By
阿帕奇风暴
如果你想要一个允许增量计算的高速事件处理系统,Storm 就可以了。如果您还需要按需运行分布式计算,而客户端正在同步等待结果,您将拥有开箱即用的分布式 RPC (DRPC)。最后但同样重要的是,由于 Storm 使用 Apache Thrift,您可以使用任何编程语言编写拓扑。如果您需要状态持久性和/或一次性交付,您应该查看更高级别的 Trident API,它也提供微批处理。
一些使用 Storm 的公司:Twitter、Yahoo!、Spotify、The Weather Channel……</p>
Storm 用例列表:http ://storm.apache.org/documentation/Powered-By.html