【问题标题】:Where do Apache Samza and Apache Storm differ in their use cases?Apache Samza 和 Apache Storm 在用例上有何不同?
【发布时间】:2015-05-20 14:48:28
【问题描述】:

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

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

【问题讨论】:

    标签: apache-storm apache-samza


    【解决方案1】:

    嗯,几个月来我一直在研究这些系统,我认为它们在用例上并没有太大的不同。我认为最好按照以下方式比较它们:

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

    【讨论】:

    • (注意,我是最初的 Samza 开发人员之一)。这是一个出色而正确的总结。这里涉及的所有内容都是我在人们问我这个问题时使用的观点。
    【解决方案2】:

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

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

    这是 Apache Storm 的架构:

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

    这是 Apache Samza 的架构:

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

    用例

    Apache Samza 由 LinkedIn 创建。

    一位软件工程师写了a post siting:

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

    使用的资源:

    Storm vs. Samza Comparison

    Useful Architectural References of Storm and Samza

    【讨论】:

    • 感谢您简洁的回答!然而,仍然存在一些问题:(1) 我是否理解 Samza 没有单个流的概念?也就是说,是否所有入站数据都集中在一起,无论其来源如何? (2) 我是否正确理解 samza 是面向批处理的,它擅长在相同的输入上运行多个任务,而 Storm 更像是具有多个处理步骤的“管道”或“级联”?还是我完全错过了你的观点?谢谢!
    【解决方案3】:

    这是 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

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

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

    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……

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      相关资源
      最近更新 更多