---
layout: default
title: Apache Storm
---

<div class="content">
  <div class="container-fluid">
      <div class="row">
          <div class="col-md-8">
              <img src="images/storm-flow.png" class="img-responsive" title="A Topology with its components" style="padding-left: 50px;" />
                <map name="topo">
                    <area shape="rect" href="" coords="60,150,120,210" title="Spout 1">
                    <area shape="rect" href="" coords="60,275,120,335" title="Spout 2">
                    <area shape="rect" href="" coords="385,275,445,335" title="bolt 3">
                    <area shape="rect" href="" coords="385,140,445,200" title="bolt 2">
                    <area shape="rect" href="" coords="385,15,445,75" title="bolt 1">
                    <area shape="rect" href="" coords="715,275,775,335" title="bolt 5">
                    <area shape="rect" href="" coords="695,75,755,135" title="bolt 4">
                </map>
            </div>
            <div class="col-md-4">
                <div class="box-warning">
                    <h4>Latest News</h4>
                    <!-- test git pubsub -->
                    <ul class="latest-news">
                        <ul class="latest-news">
                        {% for post in site.posts limit:7 %}
                        <li><a href="{{ post.url }}">{{ post.title }}</a>&nbsp;<span class="small">({{ post.date | date_to_string }}) </span></li>
                        {% endfor %}
                    </ul> 
                    <p align="right"><a href="{{ site.posts[0].url }}" class="btn-std">More News</a></p>
                </div>
            </div>
        </div>
        <div class="row">
          <div class="col-md-8">
              <div class="box-primary">
                    <h4>Why use Apache Storm?</h4>
                  <p>Apache Storm is a free and open source distributed realtime computation system. Apache Storm makes it easy to reliably process unbounded streams of data, doing for realtime processing what Hadoop did for batch processing. Apache Storm is simple, can be used with any programming language, and is a lot of fun to use!</p>
                    <p>Apache Storm has many use cases: realtime analytics, online machine learning, continuous computation, distributed RPC, ETL, and more. Apache Storm is fast: a benchmark clocked it at over <strong>a million tuples processed per second per node</strong>. It is scalable, fault-tolerant, guarantees your data will be processed, and is easy to set up and operate.</p>
                    <p>Apache Storm integrates with the queueing and database technologies you already use. An Apache Storm topology consumes streams of data and processes those streams in arbitrarily complex ways, repartitioning the streams between each stage of the computation however needed. Read more in the tutorial.</p>
                </div>
            </div>
            <div class="col-md-4">
                <div class="box-info" id="twitter_widget">
                <!-- <h4>Tweets by @ApacheStorm</h4> -->
                    <a  class="twitter-timeline" 
                        href="https://twitter.com/ApacheStorm" 
                        data-widget-id="610710246395265024">
                        Tweets
                    </a>
                    <script>!function(d,s,id){
                        var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
                        isMobile();
                    </script>
                </div>
            </div>
        </div>
    </div>
</div>

