<!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 | Technology</title>
<link rel="canonical" href="https://druid.apache.org/technology" />
<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=" active"><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 -->


    <div class="druid-header">
  <div class="container">
    <h1>Technology</h1>
    <h4></h4>
  </div>
</div>

<div class="container">
  <div class="row">
    <div class="col-md-10 col-md-offset-1">
      <p>Apache Druid is an open source distributed data store.
Druid’s core design combines ideas from <a href="https://en.wikipedia.org/wiki/Data_warehouse">data warehouses</a>, <a href="https://en.wikipedia.org/wiki/Time_series_database">timeseries databases</a>, and <a href="https://en.wikipedia.org/wiki/Full-text_search">search systems</a> to create a high performance real-time analytics database for a broad range of <a href="/use-cases">use cases</a>. Druid merges key characteristics of each of the 3 systems into its ingestion layer, storage format, querying layer, and core architecture.</p>

<div class="image-large">
  <img src="img/diagram-2.png" style="max-width: 360px">
</div>

<p>Key features of Druid include:</p>

<div class="features">
  <div class="feature">
    <span class="fa fa-columns fa"></span>
    <h5>Column-oriented storage</h5>
    <p>
      Druid stores and compresses each column individually, and only needs to read the ones needed for a particular query, which supports fast scans, rankings, and groupBys.
    </p>
  </div>
  <div class="feature">
    <span class="fa fa-search fa"></span>
    <h5>Native search indexes</h5>
    <p>
      Druid creates inverted indexes for string values for fast search and filter.
    </p>
  </div>
  <div class="feature">
    <span class="fa fa-tint fa"></span>
    <h5>Streaming and batch ingest</h5>
    <p>
      Out-of-the-box connectors for Apache Kafka, HDFS, AWS S3, stream processors, and more.
    </p>
  </div>
  <div class="feature">
    <span class="fa fa-stream fa"></span>
    <h5>Flexible schemas</h5>
    <p>
      Druid gracefully handles evolving schemas and <a href="/docs/latest/ingestion/data-formats.html#flattenspec">nested data</a>.
    </p>
  </div>
  <div class="feature">
    <span class="fa fa-clock fa"></span>
    <h5>Time-optimized partitioning</h5>
    <p>
      Druid intelligently partitions data based on time and time-based queries are significantly faster than traditional databases.
    </p>
  </div>
  <div class="feature">
    <span class="fa fa-align-left fa"></span>
    <h5>SQL support</h5>
    <p>
      In addition to its native <a href="/docs/latest/querying/querying">JSON based language</a>, Druid speaks <a href="/docs/latest/querying/sql">SQL</a> over either HTTP or JDBC.
    </p>
  </div>
  <div class="feature">
    <span class="fa fa-expand fa"></span>
    <h5>Horizontal scalability</h5>
    <p>
      Druid has been <a href="druid-powered">used in production</a> to ingest millions of events/sec, retain years of data, and provide sub-second queries.
    </p>
  </div>
  <div class="feature">
    <span class="fa fa-balance-scale fa"></span>
    <h5>Easy operation</h5>
    <p>
      Scale up or down by just adding or removing servers, and Druid automatically rebalances. Fault-tolerant architecture routes around server failures.
    </p>
  </div>
</div>

<h2 id="integration">Integration</h2>

<p>Druid is complementary to many open source data technologies in the <a href="https://www.apache.org/">Apache Software Foundation</a> including <a href="https://kafka.apache.org/">Apache Kafka</a>, <a href="https://hadoop.apache.org/">Apache Hadoop</a>, <a href="https://flink.apache.org/">Apache Flink</a>, and more.</p>

<p>Druid typically sits between a storage or processing layer and the end user, and acts as a query layer to serve analytic workloads.</p>

<div class="image-large">
  <img src="img/diagram-3.png" style="max-width: 580px;">
</div>

<h2 id="ingestion">Ingestion</h2>

<p>Druid supports both streaming and batch ingestion.
Druid connects to a source of raw data, typically a message bus such as Apache Kafka (for streaming data loads), or a distributed filesystem such as HDFS (for batch data loads).</p>

<p>Druid converts raw data stored in a source to a more read-optimized format (called a Druid “segment”) in a process calling “indexing”.</p>

<div class="image-large">
  <img src="img/diagram-4.png" style="max-width: 580px;">
</div>

<p>For more information, please visit <a href="/docs/latest/ingestion/index.html">our docs page</a>.</p>

<h2 id="storage">Storage</h2>

<p>Like many analytic data stores, Druid stores data in columns.
Depending on the type of column (string, number, etc), different compression and encoding methods are applied.
Druid also builds different types of indexes based on the column type.</p>

<p>Similar to search systems, Druid builds inverted indexes for string columns for fast search and filter.
Similar to timeseries databases, Druid intelligently partitions data by time to enable fast time-oriented queries.</p>

<p>Unlike many traditional systems, Druid can optionally pre-aggregate data as it is ingested.
This pre-aggregation step is known as <a href="/docs/latest/tutorials/tutorial-rollup.html">rollup</a>, and can lead to dramatic storage savings.</p>

<div class="image-large">
  <img src="img/diagram-5.png" style="max-width: 800px;">
</div>

<p>For more information, please visit <a href="/docs/latest/design/segments.html">our docs page</a>.</p>

<h2 id="querying">Querying</h2>

<p>Druid supports querying data through <a href="/docs/latest/querying/querying">JSON-over-HTTP</a> and <a href="/docs/latest/querying/sql">SQL</a>.
In addition to standard SQL operators, Druid supports unique operators that leverage its suite of approximate algorithms to provide rapid counting, ranking, and quantiles.</p>

<div class="image-large">
  <img src="img/diagram-6.png" style="max-width: 580px;">
</div>

<p>For more information, please visit <a href="/docs/latest/querying/querying.html">our docs page</a>.</p>

<h2 id="architecture">Architecture</h2>

<p>Druid has a microservice-based architecture can be thought of as a disassembled database.
Each core service in Druid (ingestion, querying, and coordination) can be separately or jointly deployed on commodity hardware.</p>

<p>Druid explicitly names every main service to allow the operator to fine tune each service based on the use case and workload.
For example, an operator can dedicate more resources to Druid’s ingestion service while giving less resources to Druid’s query service if the workload requires it.</p>

<p>Druid services can independently fail without impacting the operations of other services.</p>

<div class="image-large">
  <img src="img/diagram-7.png" style="max-width: 800px;">
</div>

<p>For more information, please visit <a href="/docs/latest/design/index.html">our docs page</a>.</p>

<h2 id="operations">Operations</h2>

<p>Druid is designed to power applications that need to be up 24 hours a day, 7 days a week.
As such, Druid possesses several features to ensure uptime and no data loss.</p>

<div class="features">
  <div class="feature">
    <span class="fa fa-clone fa"></span>
    <h5>Data replication</h5>
    <p>
      All data in Druid is replicated a configurable number of times so single server failures have no impact on queries.
    </p>
  </div>
  <div class="feature">
    <span class="fa fa-th-large fa"></span>
    <h5>Independent services</h5>
    <p>
      Druid explicitly names all of its main services and each service can be fine tuned based on use case.
      Services can independently fail without impacting other services.
      For example, if the ingestion services fails, no new data is loaded in the system, but existing data remains queryable.
    </p>
  </div>
  <div class="feature">
    <span class="fa fa-cloud-download-alt fa"></span>
    <h5>Automatic data backup</h5>
    <p>
      Druid automatically backs up all indexed data to a filesystem such as HDFS.
      You can lose your entire Druid cluster and quickly restore it from this backed up data.
    </p>
  </div>
  <div class="feature">
    <span class="fa fa-sync-alt fa"></span>
    <h5>Rolling updates</h5>
    <p>
      You can update a Druid cluster with no downtime and no impact to end users through rolling updates.
      All Druid releases are backwards compatible with the previous version.
    </p>
  </div>
</div>

<p>For more information, please visit <a href="/docs/latest/operations/basic-cluster-tuning.html">our docs page</a>.</p>

    </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>
