跳转到主要内容

扩展

Druid 实现了一个扩展系统,允许在运行时添加功能。扩展通常用于增加对深度存储(如 HDFS 和 S3)、元数据存储(如 MySQL 和 PostgreSQL)、新聚合器、新输入格式等的支持。

生产集群通常会使用至少两个扩展:一个用于深度存储,另一个用于元数据存储。许多集群还会使用额外的扩展。

核心扩展

核心扩展由 Druid 提交者维护。

姓名描述文档
druid-avro-extensions支持 Apache Avro 数据格式。链接
druid-azure-extensionsMicrosoft Azure 深度存储。链接
druid-basic-security支持基本 HTTP 认证和基于角色的访问控制。链接
druid-bloom-filter支持在 Druid 查询中提供布隆过滤器(Bloom filters)。链接
druid-catalog此扩展允许用户配置、更新、检索和管理存储在 Druid 目录中的元数据。链接
druid-datasketches通过 Apache DataSketches 支持近似计数和集合操作。链接
druid-google-extensionsGoogle Cloud Storage 深度存储。链接
druid-hdfs-storageHDFS 深度存储。链接
druid-histogram近似直方图和分位数聚合器。已弃用,请改用 druid-datasketches 扩展中的 DataSketches 分位数聚合器链接
druid-kafka-extraction-namespace基于 Apache Kafka 的命名空间查找。需要命名空间查找扩展。链接
druid-kafka-indexing-service用于索引服务的受控精确一次(exactly-once)Apache Kafka 摄取。链接
druid-kinesis-indexing-service用于索引服务的受控精确一次(exactly-once)Kinesis 摄取。链接
druid-kerberosDruid 进程的 Kerberos 认证。链接
druid-lookups-cached-global用于查找 (lookups) 的模块,提供 JVM 全局的预取缓存。它提供 JDBC 和 URI 实现来获取查找数据。链接
druid-lookups-cached-single针对单个查找的缓存模块,支持需要将查找与全局查找池隔离的用例。链接
druid-multi-stage-query支持 Apache Druid 的多阶段查询架构和多阶段查询任务引擎。链接
druid-orc-extensions支持 Apache ORC 数据格式。链接
druid-parquet-extensions支持 Apache Parquet 数据格式。需要加载 druid-avro-extensions。链接
druid-protobuf-extensions支持 Protobuf 数据格式。链接
druid-s3-extensions与 Amazon S3 中的数据进行交互,并使用 S3 作为深度存储。链接
druid-ec2-extensions与 AWS EC2 进行交互,用于 Middle Managers 的自动扩缩容。未记录
druid-aws-rds-extensions支持通过 AWS 令牌访问 AWS RDS 数据库集群。链接
druid-stats统计相关模块,包括方差和标准差。链接
mysql-metadata-storageMySQL 元数据存储。链接
postgresql-metadata-storagePostgreSQL 元数据存储。链接
simple-client-sslcontext简单的 SSLContext 提供程序模块,供 Druid 内部 HttpClient 在通过 HTTPS 与其他 Druid 进程通信时使用。链接
druid-pac4jDruid 进程的 OpenID Connect 认证。链接
druid-kubernetes-extensions在没有 Zookeeper 的情况下在 Kubernetes 上部署 Druid 集群。链接
druid-kubernetes-overlord-extensions支持在没有 Middle Managers 的情况下在 k8s 中启动任务。链接

社区扩展

信息

社区扩展不由 Druid 提交者维护,尽管我们接受使用这些扩展的社区成员提交的补丁。它们的测试程度可能不及核心扩展。

许多社区成员贡献了他们自己的 Druid 扩展,这些扩展并未打包在默认的 Druid tarball 中。如果您希望承担某个社区扩展的维护工作,请在 dev@druid.apache.org 上发帖告知我们!

所有这些社区扩展都可以使用 pull-deps 下载,同时指定 -c 坐标选项来拉取 org.apache.druid.extensions.contrib:{EXTENSION_NAME}:{DRUID_VERSION}

姓名描述文档
aliyun-oss-extensions阿里云 OSS 深度存储。链接
ambari-metrics-emitterAmbari 指标发射器。链接
druid-cassandra-storageApache Cassandra 深度存储。链接
druid-cloudfiles-extensionsRackspace Cloudfiles 深度存储。链接
druid-compressed-bigdecimal压缩的大十进制(Big Decimal)类型。链接
druid-ddsketch支持基于 DDSketch 的 DDSketch 近似分位数。链接
druid-deltalake-extensions支持摄取 Delta Lake 表。链接
druid-distinctcountDistinctCount 聚合器。链接
druid-exact-count-bitmap支持在 Long 列上使用 Roaring Bitmap 进行精确基数计数。链接
druid-iceberg-extensions支持摄取 Iceberg 表。链接
druid-redis-cache基于 Redis 的 Druid 缓存实现。链接
druid-time-min-max时间戳的 Min/Max 聚合器。链接
sqlserver-metadata-storageMicrosoft SQLServer 元数据存储。链接
graphite-emitterGraphite 指标发射器。链接
statsd-emitterStatsD 指标发射器。链接
kafka-emitterKafka 指标发射器。链接
druid-thrift-extensions支持 Thrift 摄取。链接
druid-opentsdb-emitterOpenTSDB 指标发射器。链接
druid-moving-average-query支持在 Druid 查询中使用移动平均和其他聚合窗口函数链接
druid-influxdb-emitterInfluxDB 指标发射器。链接
druid-momentsketch支持使用 momentsketch 库进行近似分位数查询。链接
druid-tdigestsketch支持基于 T-Digest 的近似 Sketch 聚合器。链接
gce-extensionsGCE 扩展。链接
prometheus-emitterPrometheus 暴露 Druid 指标链接
druid-spectator-histogram支持高效的近似百分位数查询。链接
druid-rabbit-indexing-service支持创建和管理 RabbitMQ 索引任务。链接
druid-ranger-security支持通过 Apache Ranger 进行访问控制。链接

将社区扩展升级为核心扩展

如果您希望将某个扩展升级为核心扩展,请在 dev@druid.apache.org 发帖。如果我们看到社区扩展得到社区的积极支持,我们可以根据社区反馈将其提升为核心扩展。

有关如何创建自己的扩展的信息,请参阅此处

加载扩展

加载核心扩展

Apache Druid 开箱即用地捆绑了所有核心扩展。请查看扩展列表以了解您的选项。您可以通过将捆绑扩展的名称添加到 common.runtime.properties 文件中的 druid.extensions.loadList 属性来加载它们。例如,要加载 postgresql-metadata-storage 和 druid-hdfs-storage 扩展,请使用以下配置:

druid.extensions.loadList=["postgresql-metadata-storage", "druid-hdfs-storage"]

这些扩展位于分发包的 extensions 目录中。

信息

Druid 捆绑了两套配置:一套用于快速入门,另一套用于集群配置。请确保您为您的设置更新了正确的 common.runtime.properties

信息

由于许可协议原因,mysql-metadata-storage 扩展不包含所需的 MySQL JDBC 驱动程序。有关如何安装此库的说明,请参阅 MySQL 扩展页面

加载社区扩展

您还可以加载 Druid 未捆绑的社区和第三方扩展。为此,请先下载扩展,然后将其安装到您的 extensions 目录中。您可以直接从分发者处下载扩展,或者如果它们在 Maven 上可用,可以使用包含的 pull-deps 为您下载它们。要使用 pull-deps,请以 groupId:artifactId:version 的形式指定扩展的完整 Maven 坐标。例如,对于(假设的)扩展 com.example:druid-example-extension:1.0.0,运行:

java \
-cp "lib/*" \
-Ddruid.extensions.directory="extensions" \
org.apache.druid.cli.Main tools pull-deps \
-c "com.example:druid-example-extension:1.0.0"

您只需要安装一次扩展。然后,将 "druid-example-extension" 添加到 common.runtime.properties 中的 druid.extensions.loadList,以指示 Druid 加载该扩展。

信息

请确保正确设置此处列出的所有与扩展相关的配置属性。

信息

几乎每个社区扩展的 Maven groupId 都是 org.apache.druid.extensions.contribartifactId 是扩展的名称,版本是最新的 Druid 稳定版本。

从类路径(classpath)加载扩展

如果您在运行时将扩展 jar 添加到类路径中,Druid 也会将其加载到系统中。这种机制相对容易理解,但也意味着您必须确保类路径上的所有依赖 jar 都是兼容的。也就是说,Druid 在使用此方法时并未提供类加载器隔离,因此您必须确保类路径上的 jar 是相互兼容的。