---
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 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="/Powered-By.html" target="blank" class="pull-right" style="font-size: 18px;">and many others</a>
                </div>
            </div>
        </div>
    </div>
</div>

