blz*_*blz 28 apache-storm apache-samza
我偶然发现了这篇文章,声称将Samza与Storm进行了对比,但似乎只是为了解决实现细节问题.
这两个分布式计算引擎的用例在哪些方面有所不同?每种工具都适合做什么工作?
Lui*_*las 42
好吧,我几个月来一直在研究这些系统,我认为它们的用例并没有太大差别.我认为最好将它们沿着这些线进行比较:
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创建.
一位软件工程师写了一篇帖子:
使用的资源:
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