Reputation: 21450
I've stumbled upon this article that purports do contrast Samza with Storm, but it seems only to address implementation details.
Where do these two distributed computation engines differ in their use cases? What kind of job is each tool good for?
Upvotes: 32
Views: 12284
Reputation: 30237
Well, I've been investigating these systems for a few months, and I don't think they differ profoundly in their use cases. I think it's best to compare them along these lines instead:
Upvotes: 46
Reputation: 442
The biggest difference between Apache Storm and Apache Samza comes down to how they stream data to process it.
Apache Storm conducts real-time computation using topology and it gets feed into a cluster where the master node distributes the code among worker nodes that execute it. In topology data is passed in between spouts that spit out data streams as immutable sets of key-value pairs.
Here's Apache Storm's architecture:
Apache Samza streams by processing messages as they come in one at a time. The streams get divided into partitions that are an ordered sequence where each has a unique ID. It supports batching and is typically used with Hadoop's YARN and Apache Kafka.
Here's Apache Samza's architecture:
Read more about the specific ways each of the systems executes specifics below.
USE CASE
Apache Samza was created by LinkedIn.
A software engineer wrote a post siting:
Resources Used:
Useful Architectural References of Storm and Samza
Upvotes: 22
Reputation: 16354
Here's an article by Tony Siciliani that provides a use case (and architecture) comparison for Storm, Spark and Samza. Apache.org links to actual use cases are also provided below.
https://tsicilian.wordpress.com/2015/02/16/streaming-big-data-storm-spark-and-samza/
Regarding use cases for Samza and Storm, he writes:
All three frameworks are particularly well-suited to efficiently process continuous, massive amounts of real-time data. So which one to use? There are no hard rules, at most a few general guidelines.
Apache Samza
If you have a large amount of state to work with (e.g. many gigabytes per partition), Samza co-locates storage and processing on the same machines, allowing to work efficiently with state that won’t fit in memory. The framework also offers flexibility with its pluggable API: its default execution, messaging and storage engines can each be replaced with your choice of alternatives. Moreover, if you have a number of data processing stages from different teams with different codebases, Samza ‘s fine-grained jobs would be particularly well-suited, since they can be added/removed with minimal ripple effects.
A few companies using Samza: LinkedIn, Intuit, Metamarkets, Quantiply, Fortscale…
Samza use case list: https://cwiki.apache.org/confluence/display/SAMZA/Powered+By
Apache Storm
If you want a high-speed event processing system that allows for incremental computations, Storm would be fine for that. If you further need to run distributed computations on demand, while the client is waiting synchronously for the results, you’ll have Distributed RPC (DRPC) out-of-the-box. Last but not least, because Storm uses Apache Thrift, you can write topologies in any programming language. If you need state persistence and/or exactly-once delivery though, you should look at the higher-level Trident API, which also offers micro-batching.
A few companies using Storm: Twitter, Yahoo!, Spotify, The Weather Channel…
Storm use case list: http://storm.apache.org/documentation/Powered-By.html
Upvotes: 10