---
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>
                    <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 Storm?</h4>
                  <p>Apache Storm is a free and open source distributed realtime computation system. Storm makes it easy to reliably process unbounded streams of data, doing for realtime processing what Hadoop did for batch processing. Storm is simple, can be used with any programming language, and is a lot of fun to use!</p>
                    <p>Storm has many use cases: realtime analytics, online machine learning, continuous computation, distributed RPC, ETL, and more. 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>Storm integrates with the queueing and database technologies you already use. A 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 class="row">
          <div class="col-md-12">
              <div id="owl-example" class="owl-carousel">
                    <a href="http://www.yahoo.com/" target="blank"><img src="images/logos/yahoo.png" class="img-responsive"></a>
                    <a href="http://www.twitter.com/" target="blank"><img src="images/logos/twitter.jpg" class="img-responsive"></a>
                    <a href="http://www.spotify.com/" target="blank"><img src="images/logos/spotify.jpg" class="img-responsive"></a>
                    <a href="http://www.yahoo.co.jp/" target="blank"><img src="images/logos/yahoo-japan.jpg" class="img-responsive"></a>
                    <a href="http://www.yelp.com/" target="blank"><img src="images/logos/yelp.jpg" class="img-responsive"></a>
                    <a href="http://flipboard.com/" target="blank"><img src="images/logos/flipboard.jpg" class="img-responsive"></a>
                    <a href="http://www.ooyala.com/" target="blank"><img src="images/logos/ooyala.jpg" class="img-responsive"></a>
                    <a href="http://groupon.com/" target="blank"><img src="images/logos/groupon.jpg" class="img-responsive"></a>
                    <a href="http://www.parc.com/" target="blank"><img src="images/logos/parc.png" class="img-responsive"></a>
                    <a href="http://www.alibaba.com/" target="blank"><img src="images/logos/alibaba.jpg" class="img-responsive"></a>
                    <a href="http://www.baidu.com/" target="blank"><img src="images/logos/bai.jpg" class="img-responsive"></a>
                    <a href="http://www.cerner.com/" target="blank"><img src="images/logos/cerner.jpg" class="img-responsive"></a>
                    <a href="http://www.fullcontact.com/" target="blank"><img src="images/logos/fullcontact.jpg" class="img-responsive"></a>
                    <a href="http://www.healthmarketscience.com/" target="blank"><img src="images/logos/health-market-science.jpg" class="img-responsive"></a>
                    <a href="http://www.infochimps.com/" target="blank"><img src="images/logos/infochimp.jpg" class="img-responsive"></a>
                    <a href="http://www.klout.com/" target="blank"><img src="images/logos/klout.jpg" class="img-responsive"></a>
                    <a href="http://www.loggly.com/" target="blank"><img src="images/logos/loggly.jpg" class="img-responsive"></a>
                    <a href="http://www.premise.is/" target="blank"><img src="images/logos/premise.jpg" class="img-responsive"></a>
                    
                    <a href="http://www.iqyi.com/" target="blank"><img src="images/logos/qiy.jpg" class="img-responsive"></a>
                    <a href="http://www.quicklizard.com/" target="blank"><img src="images/logos/quicklizard.jpg" class="img-responsive"></a>
                    <a href="http://www.rocketfuel.com/" target="blank"><img src="images/logos/rocketfuel.jpg" class="img-responsive"></a>
                    <a href="http://www.rubiconproject.com/" target="blank"><img src="images/logos/rubicon.jpg" class="img-responsive">
                    </a>
                    <a href="http://spider.io/" target="blank" ><img src="images/logos/spider.jpg" class="img-responsive"></a>
                    <a href="http://www.taobao.com/" target="blank" ><img src="images/logos/taobao.jpg" class="img-responsive"></a>
                    <a href="http://www.weather.com/" target="blank" ><img src="images/logos/the-weather-channel.jpg" class="img-responsive"></a>
                    <a href="https://www.verisigninc.com/" target="blank" ><img src="images/logos/verisign.jpg" class="img-responsive"></a>
                    <a href="http://www.webmd.com/" target="blank" ><img src="images/logos/webmd.jpg" class="img-responsive"></a>
                    <a href="http://www.wego.com/"><img src="images/logos/wego.jpg" class="img-responsive"></a>
                </div>
                <div>
                  <a href="/documentation/Powered-By.html" target="blank" class="pull-right" style="font-size: 18px;">and many others</a>
                </div>
            </div>
        </div>
    </div>
</div>

