<!DOCTYPE html>
<html lang="en">
  <head>	
    <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Apache Druid">
<meta name="keywords" content="druid,kafka,database,analytics,streaming,real-time,real time,apache,open source">
<meta name="author" content="Apache Software Foundation">

<title>Druid | Database for modern analytics applications</title>
<link rel="canonical" href="https://druid.apache.org/" />
<link rel="alternate" type="application/atom+xml" href="/feed">
<link rel="shortcut icon" href="/img/favicon.png">

<link rel="stylesheet" href="/assets/css/font-awesome-5.css">

<link href='//fonts.googleapis.com/css?family=Open+Sans+Condensed:300,700,300italic|Open+Sans:300italic,400italic,600italic,400,300,600,700' rel='stylesheet' type='text/css'>

<link rel="stylesheet" href="/css/bootstrap-pure.css?v=1.1">
<link rel="stylesheet" href="/css/base.css?v=1.1">
<link rel="stylesheet" href="/css/header.css?v=1.1">
<link rel="stylesheet" href="/css/footer.css?v=1.1">
<link rel="stylesheet" href="/css/syntax.css?v=1.1">
<link rel="stylesheet" href="/css/docs.css?v=1.1">

<script>
  (function() {
    var cx = '000162378814775985090:molvbm0vggm';
    var gcse = document.createElement('script');
    gcse.type = 'text/javascript';
    gcse.async = true;
    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
        '//cse.google.com/cse.js?cx=' + cx;
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(gcse, s);
  })();
</script>


  </head>
  <body>	
    <!-- Start page_header include -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<div class="top-navigator">
  <div class="container">
    <div class="left-cont">
      <a class="logo" href="/"><span class="druid-logo"></span></a>
    </div>
    <div class="right-cont">
      <ul class="links">
        <li class=""><a href="/technology">Technology</a></li>
        <li class=""><a href="/use-cases">Use Cases</a></li>
        <li class=""><a href="/druid-powered">Powered By</a></li>
        <li class=""><a href="/docs/latest/design/">Docs</a></li>
        <li class=""><a href="/community/">Community</a></li>
        <li class="header-dropdown">
          <a>Apache</a>
          <div class="header-dropdown-menu">
            <a href="https://www.apache.org/" target="_blank">Foundation</a>
            <a href="https://www.apache.org/events/current-event" target="_blank">Events</a>
            <a href="https://www.apache.org/licenses/" target="_blank">License</a>
            <a href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a>
            <a href="https://www.apache.org/security/" target="_blank">Security</a>
            <a href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship</a>
          </div>
        </li>
        <li class=" button-link"><a href="/downloads.html">Download</a></li>
      </ul>
    </div>
  </div>
  <div class="action-button menu-icon">
    <span class="fa fa-bars"></span> MENU
  </div>
  <div class="action-button menu-icon-close">
    <span class="fa fa-times"></span> MENU
  </div>
</div>

<script type="text/javascript">
  var $menu = $('.right-cont');
  var $menuIcon = $('.menu-icon');
  var $menuIconClose = $('.menu-icon-close');

  function showMenu() {
    $menu.fadeIn(100);
    $menuIcon.fadeOut(100);
    $menuIconClose.fadeIn(100);
  }

  $menuIcon.click(showMenu);

  function hideMenu() {
    $menu.fadeOut(100);
    $menuIconClose.fadeOut(100);
    $menuIcon.fadeIn(100);
  }

  $menuIconClose.click(hideMenu);

  $(window).resize(function() {
    if ($(window).width() >= 840) {
      $menu.fadeIn(100);
      $menuIcon.fadeOut(100);
      $menuIconClose.fadeOut(100);
    }
    else {
      $menu.fadeOut(100);
      $menuIcon.fadeIn(100);
      $menuIconClose.fadeOut(100);
    }
  });
</script>

<!-- Stop page_header include -->


    <link rel="stylesheet" href="/css/index.css">

<main class="druid-masthead">
  <div class="container">
  <div class="row">
    <div class="text-center">
    <p class="lead">Apache Druid is a real-time database to power modern analytics applications.</p>
    <p>
      <a class="button" href="/downloads.html"><span class="fa fa-download"></span> Download</a>
      <a class="button" href="/community/join-slack?v=1"><span class="fab fa-slack"></span> Join Slack</a>
      <a class="button" href="https://github.com/apache/druid/"><span class="fab fa-github"></span> GitHub</a></p>
    </p>
  </div>
  </div>
  </div>
</main>

<div class="container">
  <div class="row">

    <div class="col-md-9">
      <h2>
        Overview
      </h2>
      <div class="features">
        <div class="feature">
          <span class="fa fa-chart-line fa"></span>
          <h5>Build fast, modern data analytics applications</h5>
          <p>
            Druid is designed for <a href='/use-cases'>workflows</a> where fast ad-hoc analytics, instant data visibility, or supporting high concurrency is important. As such, Druid is often used to power UIs where an interactive, consistent user experience is desired.
          </p>
        </div>
        <div class="feature">
          <span class="fa fa-forward fa"></span>
          <h5>Easy integration with your existing data pipelines</h5>
          <p>
            Druid streams data from message buses such as <a href='http://kafka.apache.org/'>Kafka</a>, and <a href='https://aws.amazon.com/kinesis/'>Amazon Kinesis</a>, and batch load files from data lakes such as <a href='https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html'>HDFS</a>, and <a href='https://aws.amazon.com/s3/'>Amazon S3</a>. Druid supports most popular file formats for structured and semi-structured data.
          </p>
        </div>
        <div class="feature">
          <span class="fa fa-lightbulb fa"></span>
          <h5>Fast, consistent queries at high concurrency</h5>
          <p>
            Druid has been <a href='https://imply.io/post/performance-benchmark-druid-presto-hive'>benchmarked</a> to greatly outperform legacy solutions. Druid combines novel storage ideas, indexing structures, and both exact and approximate queries to return most results in under a second.
          </p>
        </div>
        <div class="feature">
          <span class="fa fa-unlock fa"></span>
          <h5>Broad applicability</h5>
          <p>
            Druid <a href='/use-cases'>unlocks new types of queries and workflows</a> for clickstream, APM, supply chain, network telemetry, digital marketing, risk/fraud, and many other types of data. Druid is purpose built for rapid, ad-hoc queries on both real-time and historical data.
          </p>
        </div>
        <div class="feature">
          <span class="fa fa-cloud fa"></span>
          <h5>Deploy in public, private, and hybrid clouds</h5>
          <p>
            Druid can be deployed in any *NIX environment on commodity hardware, both in the cloud and on premise. Deploying Druid is easy: scaling up and down is as simple as adding and removing Druid services.
          </p>
        </div>
      </div>

      <h2>
        Learn more
      </h2>
      <div class="features">
        <div class="feature">
          <span class="fa fa-power-off fa"></span>
          <h5>Powered By</h5>
          <p>
            Druid is proven in production at the <a href='/druid-powered'>world’s leading companies</a> at massive scale.
          </p>
        </div>
        <div class="feature">
          <span class="fa fa-info fa"></span>
          <h5>FAQ</h5>
          <p>
            Learn about some of the <a href='faq'>most common questions about Druid</a>.
          </p>
        </div>
        <div class="feature">
          <span class="fa fa-flag-checkered fa"></span>
          <h5>Quickstart</h5>
          <p>
            <a href="/docs/latest/tutorials/quickstart">Get started with Druid</a> in minutes. Load your own data and query it.
          </p>
        </div>
        <div class="feature">
          <span class="fa fa-question-circle fa"></span>
          <h5>Get Help</h5>
          <p>
            Get help from a <a href='/community/'>wide network of community members</a> about using Druid.
          </p>
        </div>
      </div>

    </div>

    <div class="col-md-3">
      <link rel="stylesheet" href="/css/news-list.css">

<div class="item-list">
  <h3>
    Upcoming Events
  </h3>
  
  <div class="event">
    <div class="mini-cal">
      <div class="date-month">
        Dec
      </div>
      <div class="date-day">
         6
      </div>
    </div>
    <p>
      <a href="https://druidsummit.org/">
        <span class ="title">Virtual Druid Summit (day 1)</span><br>
        <span class="text-muted">Organized by Imply</span>
      </a>
    </p>
  </div>
  
  <div class="event">
    <div class="mini-cal">
      <div class="date-month">
        Dec
      </div>
      <div class="date-day">
         7
      </div>
    </div>
    <p>
      <a href="https://druidsummit.org/">
        <span class ="title">Virtual Druid Summit (day 2)</span><br>
        <span class="text-muted">Organized by Imply</span>
      </a>
    </p>
  </div>
  
  <a class="btn btn-default btn-xs" href="https://www.meetup.com/topics/apache-druid/">Join a Druid Meetup!</a>
</div>

      <link rel="stylesheet" href="/css/news-list.css">

<div class="item-list">
  <h3>
    Featured Content
  </h3>
  
  <p>
    <a href="https://blog.hellmar-becker.de/2022/03/20/druid-data-cookbook-quantiles-in-druid-with-datasketches/">
      <span class="title">Druid Data Cookbook: Quantiles in Druid with Data Sketches</span><br>
      <span class="text-muted">Hellmar Becker - </span>
      <span class="text-muted">Imply</span><br>
      <span class="text-muted">Mar 20 2022</span>
    </a>
  </p>
  
  <p>
    <a href="https://blog.hellmar-becker.de/2022/02/09/druid-data-cookbook-ingestion-transforms/">
      <span class="title">Druid Data Cookbook: Ingestion Transforms</span><br>
      <span class="text-muted">Hellmar Becker - </span>
      <span class="text-muted">Imply</span><br>
      <span class="text-muted">Feb  9 2022</span>
    </a>
  </p>
  
  <p>
    <a href="https://imply.io/blog/multi-dimensional-range-partitioning/">
      <span class="title">Multi-dimensional range partitioning</span><br>
      <span class="text-muted">Kashif Faraz - </span>
      <span class="text-muted">Imply</span><br>
      <span class="text-muted">Feb  4 2022</span>
    </a>
  </p>
  
  <p>
    <a href="https://www.rilldata.com/blog/seeking-the-perfect-apache-druid-rollup">
      <span class="title">Seeking the Perfect Apache Druid Rollup</span><br>
      <span class="text-muted">Neil Buesing - </span>
      <span class="text-muted">Rill Data</span><br>
      <span class="text-muted">Dec 16 2021</span>
    </a>
  </p>
  
  <p>
    <a href="https://www.confluent.io/blog/scaling-apache-druid-for-real-time-cloud-analytics-at-confluent/">
      <span class="title">Scaling Apache Druid for Real-Time Cloud Analytics at Confluent</span><br>
      <span class="text-muted">Harini Rajendran, Zohreh Krimi - </span>
      <span class="text-muted">Confluent</span><br>
      <span class="text-muted">Nov  8 2021</span>
    </a>
  </p>
  
</div>
      <div class="bottom-news">
        <link rel="stylesheet" href="/css/news-list.css">

<div class="item-list">
  <h3>
    Latest releases
  </h3>
  
  
  
  
  
  
  
  <p>
    <a href="https://github.com/apache/druid/releases/tag/druid-24.0.1">
      <span class="title">Apache Druid 24.0.1 Released</span><br>
      <span class="text-muted">Nov 21 2022</span>
    </a>
  </p>
  
  
  
  
  
  
  
  
  <p>
    <a href="https://github.com/apache/druid/releases/tag/druid-24.0.0">
      <span class="title">Apache Druid 24.0.0 Released</span><br>
      <span class="text-muted">Sep 16 2022</span>
    </a>
  </p>
  
  
  
  
  
  
  
  
  <p>
    <a href="https://github.com/apache/druid/releases/tag/druid-0.23.0">
      <span class="title">Apache Druid 0.23.0 Released</span><br>
      <span class="text-muted">Jun 22 2022</span>
    </a>
  </p>
  
  
  
  
</div>

      </div>
    </div>

  </div>
</div>


    
    <!-- Start page_footer include -->
<footer class="druid-footer">
<div class="container">
  <div class="text-center">
    <p>
    <a href="/technology">Technology</a>&ensp;·&ensp;
    <a href="/use-cases">Use Cases</a>&ensp;·&ensp;
    <a href="/druid-powered">Powered by Druid</a>&ensp;·&ensp;
    <a href="/docs/latest/">Docs</a>&ensp;·&ensp;
    <a href="/community/">Community</a>&ensp;·&ensp;
    <a href="/downloads.html">Download</a>&ensp;·&ensp;
    <a href="/faq">FAQ</a>
    </p>
  </div>
  <div class="text-center">
    <a title="Join the user group" href="https://groups.google.com/forum/#!forum/druid-user" target="_blank"><span class="fa fa-comments"></span></a>&ensp;·&ensp;
    <a title="Follow Druid" href="https://twitter.com/druidio" target="_blank"><span class="fab fa-twitter"></span></a>&ensp;·&ensp;
    <a title="GitHub" href="https://github.com/apache/druid" target="_blank"><span class="fab fa-github"></span></a>
  </div>
  <div class="text-center license">
    Copyright © 2020 <a href="https://www.apache.org/" target="_blank">Apache Software Foundation</a>.<br>
    Except where otherwise noted, licensed under <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.<br>
    Apache Druid, Druid, and the Druid logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.
  </div>
</div>
</footer>

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'UA-131010415-1');
</script>
<script>
  function trackDownload(type, url) {
    ga('send', 'event', 'download', type, url);
  }
</script>
<script src="//code.jquery.com/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="/assets/js/druid.js"></script>
<!-- stop page_footer include -->

    
  </body>
</html>
