<html lang="en"><head>
    
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="Apex is an enterprise grade native YARN big data-in-motion platform that unifies stream processing as well as batch processing.">
    <meta name="author" content="Apache Software Foundation">
    <link rel="icon" href="favicon.ico">

    <title>Apache Apex</title>

    <!-- Main Stylesheet -->
    <link href="css/main.css" rel="stylesheet">

    <script>
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

      ga('create', 'UA-85540278-1', 'auto');
      ga('send', 'pageview');
    </script>
    
  </head>

  <body>
    <nav class="navbar navbar-default navbar-static-top" id="main-nav">
      <div class="container">

      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="/">
          <img src="images/apex-logo.svg" class="logo" alt="Apache Apex Logo">
          Apache Apex<span class="trademark">&trade;</span>
        </a>
      </div>

      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
        <ul class="nav navbar-right navbar-nav">
          <li class="nav-item">
            <a class="nav-link " href="/">Home</a>
          </li>
          <li class="nav-item">
            <a class="nav-link " href="/docs.html">Documentation</a>
          </li>
          <li class="nav-item">
            <a class="nav-link " href="/powered-by-apex.html">Powered By Apex</a>
          </li>
          <li class="nav-item">
            <a class="nav-link " href="/roadmap.html">Roadmap</a>
          </li>

            <li class="nav-item nav-mouseover">
              <ul class="dropdown-menu">
                <li class=""><a href="/community.html#mailing-lists">Mailing Lists</a></li>
                <li class=""><a href="/community.html#issue-tracking">Issue Tracking</a></li>
                <li class=""><a href="http://stackoverflow.com/questions/tagged/apache-apex">Stack Overflow</a></li>
                <li class=""><a href="/community.html#events">Events</a></li>
                <li class=""><a href="/community.html#contributing">Contributing</a></li>
                <li class=""><a href="http://www.apache.org/foundation/how-it-works.html">Apache Foundation</a></li>
              </ul>
              <a href="/community.html" class="nav-link">Community</a>
            </li>
          

            <li class="nav-item nav-mouseover">
              <ul class="dropdown-menu">
                <li class=""><a href="https://github.com/apache/apex-core">Apex Core</a></li>
                <li class=""><a href="https://github.com/apache/apex-malhar">Apex Malhar</a></li>
                <li class=""><a href="https://github.com/apache/apex-site">Apex Site</a></li>
              </ul>
              <a href="https://github.com/apache/apex-core" class="nav-link">Github</a>
            </li>
          
          <li class="nav-item">
            <a class="nav-link btn btn-success btn-download" href="/downloads.html">Download</a>
          </li>
        </ul>
        
      </div>
    </nav>

<!-- Main jumbotron for a primary marketing message or call to action -->
<div class="jumbotron">
  <div class="container">
    <div class="row">
      <div class="logo-ctnr col-md-3">
        <img src="images/apex-logo.svg" class="logo" alt="Apache Apex Logo">
      </div>
      <div class="text-ctnr col-md-9">
        <h1>Apache Apex<span class="banner-trademark">&trade;</span></h1>
        <p>Enterprise-grade unified stream and batch processing engine.</p>
        <a class="h2" href="https://blogs.apache.org/apex/entry/apache_apex_malhar_3_5">
          <i>Now with <b>event-time windowing</b> and <b>high-level API.</b></i>
        </a>
      </div>
    </div>
  </div>

  <div class="break"></div>

  <div class="container">
    <div class="col-md-4">
        <h2>Enterprise Grade</h2>
        <p class="text-regular"><strong>Apex is a Hadoop YARN native platform that unifies stream and batch processing</strong>. It processes big data in-motion in a way that is highly scalable, highly performant, fault tolerant, stateful, secure, distributed, and easily operable.</p>
    </div>
    <div class="col-md-4">
      <h2>Low Barrier-to-Entry</h2>
      <p class="text-regular"><strong>Write your business logic and leave all operability to the platform.</strong> It provides a simple API that enables developers to write or re-use generic Java code, thereby lowering the expertise needed to write big data applications.</p>
    </div>
    <div class="col-md-4">
      <h2>Modular</h2>
      <p class="text-regular"><strong>The Apex platform comes with Malhar</strong>, a library of operators (units of functionality) that can be leveraged to quickly create non-trivial applications. Includes many connectors for messaging systems, databases, files etc.</p>
    </div>
  </div>

</div>


<div class="container">
  <div class="col-md-8">
    <h1 id="announcements-a-href-https-www-apache-org-events-current-event-html-img-style-float-right-src-https-www-apache-org-events-current-event-234x60-png-a-">Announcements <a  href="https://www.apache.org/events/current-event.html"><img style="float:right" src="https://www.apache.org/events/current-event-234x60.png"/></a></h1>
<h2 id="apache-apex-core-release-3-7-0">Apache Apex Core release 3.7.0</h2>
<p>Apr 28, 2018.  The Apache Apex community is pleased to announce release <a href="/downloads.html">3.7.0</a> of the Core.</p>
<p>Changes: <a href="https://github.com/apache/apex-core/blob/v3.7.0/CHANGELOG.md">https://github.com/apache/apex-core/blob/v3.7.0/CHANGELOG.md</a></p>
<h2 id="apache-apex-malhar-library-release-3-8-0">Apache Apex Malhar Library release 3.8.0</h2>
<p>Nov 12, 2017.  The Apache Apex community is pleased to announce release <a href="/downloads.html">3.8.0</a> of the Malhar Library.</p>
<p>Changes: <a href="https://github.com/apache/apex-malhar/blob/v3.8.0/CHANGELOG.md">https://github.com/apache/apex-malhar/blob/v3.8.0/CHANGELOG.md</a></p>
<h2 id="apex-at-strata-new-york">Apex at Strata New York</h2>
<p>Sep 28, 2017. Exactly once, more than once: Apache Kafka, Heron, and Apache Apex.</p>
<p><a href="https://conferences.oreilly.com/strata/strata-ny/public/schedule/detail/63244">https://conferences.oreilly.com/strata/strata-ny/public/schedule/detail/63244</a></p>
<h2 id="apache-apex-core-release-3-6-0">Apache Apex Core release 3.6.0</h2>
<p>May 04, 2017.  The Apache Apex community is pleased to announce release <a href="/downloads.html">3.6.0</a> of the Core.</p>
<p>Changes: <a href="https://github.com/apache/apex-core/blob/v3.6.0/CHANGELOG.md">https://github.com/apache/apex-core/blob/v3.6.0/CHANGELOG.md</a></p>
  </div>
  <div class="col-md-4">
    <h2 id="tweets-by-apacheapex-https-twitter-com-apacheapex-">Tweets by <a href="https://twitter.com/ApacheApex">@ApacheApex</a></h2>
<p><a class="twitter-timeline"  href="https://twitter.com/ApacheApex" data-chrome="nofooter noborders noheader transparent" data-widget-id="739909112654266368">Tweets by @ApacheApex</a></p>
<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");</script>  </div>
</div>


  <hr>
  <div class="container">
    <footer id="main-footer">
      <p>
        Copyright &copy; <span id="copyright-year">2015</span> <a href="http://apache.org">The Apache Software Foundation</a>,
        Licensed under the Apache License, Version 2.0<br>
        Apache and the Apache feather logo are trademarks of The Apache Software Foundation. | <a href="/privacy.html">Privacy Policy</a><br>
        <a class="footer-link-img" href="http://apache.org"><img src="/images/asf_logo.svg" alt="The Apache Software Foundation"></a>
      </p>
    </footer>
  </div> <!-- /container -->

  <!-- Placed at the end of the document so the pages load faster -->
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  <script src="/js/bootstrap.min.js"></script>
  <script src="js/docs.js"></script>

  <script>
    $('#copyright-year').text((new Date()).getFullYear());

    $('.btn-download').click(function(e){
      ga('send', {
        hitType: 'event',
        eventCategory: 'Download Button',
        eventAction: 'Button Click',
        eventLabel: 'Page Header'
      });
    });

  </script>

</body>
</html>
