Skip to main content
Druid implements an extension system that allows for adding functionality at runtime. Extensions are commonly used to add support for deep storages (like HDFS and S3), metadata stores (like MySQL and PostgreSQL), new aggregators, new input formats, and so on. Production clusters will generally use at least two extensions: one for deep storage and one for a metadata store. Many clusters will also use additional extensions.

Core Extensions

Core extensions are maintained by Druid committers and bundled with the default Druid distribution.

Storage Extensions

ExtensionDescriptionDocumentation
druid-s3-extensionsAmazon S3 deep storage and S3 input sourceS3 Extension
druid-hdfs-storageHDFS deep storageHDFS Extension
druid-azure-extensionsMicrosoft Azure deep storageAzure Extension
druid-google-extensionsGoogle Cloud Storage deep storageGoogle Extension
druid-cassandra-storageApache Cassandra deep storageCommunity extension

Metadata Storage Extensions

ExtensionDescriptionDocumentation
mysql-metadata-storageMySQL metadata storeMySQL Extension
postgresql-metadata-storagePostgreSQL metadata storePostgreSQL Extension
The mysql-metadata-storage extension does not include the MySQL JDBC driver due to licensing. You must download and install it separately.

Data Format Extensions

ExtensionDescriptionDocumentation
druid-avro-extensionsApache Avro data format supportAvro Extension
druid-orc-extensionsApache ORC data format supportORC Extension
druid-parquet-extensionsApache Parquet data format support (requires druid-avro-extensions)Parquet Extension
druid-protobuf-extensionsProtobuf data format supportProtobuf Extension

Ingestion Extensions

ExtensionDescriptionDocumentation
druid-kafka-indexing-serviceSupervised exactly-once Apache Kafka ingestionKafka Ingestion
druid-kinesis-indexing-serviceSupervised exactly-once Kinesis ingestionKinesis Ingestion
druid-kafka-extraction-namespaceApache Kafka-based namespaced lookupKafka Lookups

Query and Aggregation Extensions

ExtensionDescriptionDocumentation
druid-datasketchesApproximate counts and set operations with Apache DataSketchesDataSketches Extension
druid-bloom-filterBloom filters in Druid queriesBloom Filter
druid-histogramApproximate histograms and quantiles (deprecated, use DataSketches)Approximate Histograms
druid-statsStatistics including variance and standard deviationStats Extension
druid-multi-stage-queryMulti-stage query architecture and task engineMSQ Extension

Security Extensions

ExtensionDescriptionDocumentation
druid-basic-securityBasic HTTP authentication and role-based access controlBasic Security
druid-kerberosKerberos authentication for Druid processesKerberos
druid-pac4jOpenID Connect authenticationPAC4J Extension
simple-client-sslcontextSimple SSLContext provider for internal HTTPS communicationSSL Context

Other Core Extensions

ExtensionDescriptionDocumentation
druid-lookups-cached-globalJVM-global eager caching for lookups with JDBC and URI implementationsCached Lookups
druid-lookups-cached-singlePer-lookup caching isolated from global poolSingle Lookup Cache
druid-catalogConfigure, update, and manage metadata in Druid’s catalogCatalog
druid-kubernetes-extensionsDruid cluster deployment on Kubernetes without ZooKeeperKubernetes Extension
druid-kubernetes-overlord-extensionsLaunch tasks in Kubernetes without Middle ManagersK8s Jobs
druid-aws-rds-extensionsAWS token-based access to AWS RDS DB clustersAWS RDS

Community Extensions

Community extensions are not maintained by Druid committers. They may not have been as extensively tested as core extensions.
Community extensions can be downloaded using the pull-deps tool with the -c coordinate option:
java \
  -cp "lib/*" \
  -Ddruid.extensions.directory="extensions" \
  -Ddruid.extensions.hadoopDependenciesDir="hadoop-dependencies" \
  org.apache.druid.cli.Main tools pull-deps \
  --no-default-hadoop \
  -c "org.apache.druid.extensions.contrib:{EXTENSION_NAME}:{DRUID_VERSION}"
ExtensionDescriptionDocumentation
druid-redis-cacheRedis-based cache implementationRedis Cache
druid-deltalake-extensionsSupport for ingesting Delta Lake tablesDelta Lake
druid-iceberg-extensionsSupport for ingesting Iceberg tablesIceberg
druid-compressed-bigdecimalCompressed Big Decimal typeCompressed BigDecimal
prometheus-emitterExpose Druid metrics for PrometheusPrometheus Emitter
graphite-emitterGraphite metrics emitterGraphite Emitter
kafka-emitterKafka metrics emitterKafka Emitter
druid-ranger-securityAccess control through Apache RangerRanger Security

Loading Extensions

Loading Core Extensions

Apache Druid bundles all core extensions. To load them, add their names to the druid.extensions.loadList property in common.runtime.properties:
druid.extensions.loadList=["postgresql-metadata-storage", "druid-hdfs-storage"]
These extensions are located in the extensions directory of the distribution.
Make sure you’re updating the correct common.runtime.properties file for your setup (quickstart vs. clustered configuration).

Loading Community Extensions

To load community extensions:
  1. Download the extension using pull-deps or directly from the distributor:
java \
  -cp "lib/*" \
  -Ddruid.extensions.directory="extensions" \
  -Ddruid.extensions.hadoopDependenciesDir="hadoop-dependencies" \
  org.apache.druid.cli.Main tools pull-deps \
  --no-default-hadoop \
  -c "com.example:druid-example-extension:1.0.0"
  1. Add the extension name to druid.extensions.loadList in common.runtime.properties:
druid.extensions.loadList=["druid-example-extension"]
The Maven groupId for most community extensions is org.apache.druid.extensions.contrib. The artifactId is the extension name, and the version matches the Druid version.

Loading Extensions from Classpath

If you add your extension jar to the classpath at runtime, Druid will load it into the system. However, this means you must ensure all dependency jars on the classpath are compatible.
Druid makes no provisions for class loader isolation when using this method. Ensure all jars on your classpath are mutually compatible.

Extension Configuration Properties

Extension behavior can be configured in common.runtime.properties:
# Directory containing extensions
druid.extensions.directory=extensions

# Hadoop dependencies directory  
druid.extensions.hadoopDependenciesDir=hadoop-dependencies

# List of extensions to load (null = load all, [] = load none)
druid.extensions.loadList=["postgresql-metadata-storage", "druid-s3-extensions"]

# Search main classloader for extensions
druid.extensions.searchCurrentClassloader=true

# Extensions prefer their own jars over Druid's bundled jars
druid.extensions.useExtensionClassloaderFirst=false
For complete extension configuration details, see the Configuration Reference.

Creating Custom Extensions

For information on how to create your own extension, see the Druid Extension Development Guide.

Promoting Community Extensions

If you’d like a community extension to be promoted to core, or if you want to take on maintenance for a community extension, please post on dev@druid.apache.org.

Configuration Reference

Main configuration reference for all Druid properties

Extension Development

Learn how to create custom extensions

Build docs developers (and LLMs) love