扩展
Druid 实现了一个扩展系统,允许在运行时添加功能。扩展通常用于增加对深度存储(如 HDFS 和 S3)、元数据存储(如 MySQL 和 PostgreSQL)、新聚合器、新输入格式等的支持。
生产集群通常会使用至少两个扩展:一个用于深度存储,另一个用于元数据存储。许多集群还会使用额外的扩展。
核心扩展
核心扩展由 Druid 提交者维护。
| 姓名 | 描述 | 文档 |
|---|---|---|
| druid-avro-extensions | 支持 Apache Avro 数据格式。 | 链接 |
| druid-azure-extensions | Microsoft Azure 深度存储。 | 链接 |
| druid-basic-security | 支持基本 HTTP 认证和基于角色的访问控制。 | 链接 |
| druid-bloom-filter | 支持在 Druid 查询中提供布隆过滤器(Bloom filters)。 | 链接 |
| druid-catalog | 此扩展允许用户配置、更新、检索和管理存储在 Druid 目录中的元数据。 | 链接 |
| druid-datasketches | 通过 Apache DataSketches 支持近似计数和集合操作。 | 链接 |
| druid-google-extensions | Google Cloud Storage 深度存储。 | 链接 |
| druid-hdfs-storage | HDFS 深度存储。 | 链接 |
| 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-kerberos | Druid 进程的 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-storage | MySQL 元数据存储。 | 链接 |
| postgresql-metadata-storage | PostgreSQL 元数据存储。 | 链接 |
| simple-client-sslcontext | 简单的 SSLContext 提供程序模块,供 Druid 内部 HttpClient 在通过 HTTPS 与其他 Druid 进程通信时使用。 | 链接 |
| druid-pac4j | Druid 进程的 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-emitter | Ambari 指标发射器。 | 链接 |
| druid-cassandra-storage | Apache Cassandra 深度存储。 | 链接 |
| druid-cloudfiles-extensions | Rackspace Cloudfiles 深度存储。 | 链接 |
| druid-compressed-bigdecimal | 压缩的大十进制(Big Decimal)类型。 | 链接 |
| druid-ddsketch | 支持基于 DDSketch 的 DDSketch 近似分位数。 | 链接 |
| druid-deltalake-extensions | 支持摄取 Delta Lake 表。 | 链接 |
| druid-distinctcount | DistinctCount 聚合器。 | 链接 |
| druid-exact-count-bitmap | 支持在 Long 列上使用 Roaring Bitmap 进行精确基数计数。 | 链接 |
| druid-iceberg-extensions | 支持摄取 Iceberg 表。 | 链接 |
| druid-redis-cache | 基于 Redis 的 Druid 缓存实现。 | 链接 |
| druid-time-min-max | 时间戳的 Min/Max 聚合器。 | 链接 |
| sqlserver-metadata-storage | Microsoft SQLServer 元数据存储。 | 链接 |
| graphite-emitter | Graphite 指标发射器。 | 链接 |
| statsd-emitter | StatsD 指标发射器。 | 链接 |
| kafka-emitter | Kafka 指标发射器。 | 链接 |
| druid-thrift-extensions | 支持 Thrift 摄取。 | 链接 |
| druid-opentsdb-emitter | OpenTSDB 指标发射器。 | 链接 |
| druid-moving-average-query | 支持在 Druid 查询中使用移动平均和其他聚合窗口函数。 | 链接 |
| druid-influxdb-emitter | InfluxDB 指标发射器。 | 链接 |
| druid-momentsketch | 支持使用 momentsketch 库进行近似分位数查询。 | 链接 |
| druid-tdigestsketch | 支持基于 T-Digest 的近似 Sketch 聚合器。 | 链接 |
| gce-extensions | GCE 扩展。 | 链接 |
| prometheus-emitter | 为 Prometheus 暴露 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 目录中。
由于许可协议原因,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.contrib。artifactId 是扩展的名称,版本是最新的 Druid 稳定版本。
从类路径(classpath)加载扩展
如果您在运行时将扩展 jar 添加到类路径中,Druid 也会将其加载到系统中。这种机制相对容易理解,但也意味着您必须确保类路径上的所有依赖 jar 都是兼容的。也就是说,Druid 在使用此方法时并未提供类加载器隔离,因此您必须确保类路径上的 jar 是相互兼容的。