使用 Docker 运行
本快速入门指南将引导您完成从 Docker Hub 下载 Apache Druid 镜像,并使用 Docker 和 Docker Compose 将其部署到单台机器上的步骤。完成初始设置后,集群即可开始加载数据。
在开始快速入门之前,建议您阅读 Druid 概览和数据摄入概览,因为教程中会引用这些页面中讨论的概念。熟悉 Docker 也会有所帮助。
本教程假设您将从 GitHub 下载所需文件。这些文件也可在 Druid 安装包和 Druid 源代码中找到。
先决条件
Docker 内存要求
默认的 docker-compose.yml 会启动八个容器:Zookeeper、PostgreSQL,以及六个基于 微型快速入门配置的 Druid 容器。每个 Druid 服务都被配置为最多使用 7 GiB 内存(6 GiB 直接内存和 1 GiB 堆内存)。不过,快速入门并不会耗尽所有可用内存。
对于此设置,Docker 需要至少 6 GiB 的可用内存给 Druid 集群。对于 Mac OS 上的 Docker Desktop,请在 Docker Desktop 首选项中调整内存设置。如果您遇到 137 错误代码导致的崩溃,通常是因为分配给 Docker 的内存不足。
您可以修改 Docker environment 文件中 DRUID_SINGLE_NODE_CONF 的值,以使用不同的单机模式。例如,要使用 nano 快速入门:DRUID_SINGLE_NODE_CONF=nano-quickstart。
入门指南
创建一个目录以存放 Druid Docker 文件。
Druid 源代码中包含一个 示例 docker-compose.yml,它会从 Docker Hub 拉取镜像,非常适合作为示例环境,用于尝试基于 Docker 的 Druid 配置和部署。将此文件下载到上面创建的目录中。
Compose 文件
示例 docker-compose.yml 将为每个 Druid 服务创建一个容器,以及 ZooKeeper 和一个作为元数据存储的 PostgreSQL 容器。
它还将创建一个名为 druid_shared 的卷作为深度存储,用于在 Druid 服务之间保存和共享分片数据(segments)和任务日志。该卷在容器内挂载为 opt/shared。
环境文件
Druid docker-compose.yml 示例使用了一个 环境文件来指定完整的 Druid 配置,包括 配置 部分中描述的环境变量。该文件默认命名为 environment,必须与 docker-compose.yml 文件位于同一目录中。将示例 environment 文件下载到上面创建的目录中。此文件中的选项非常适合用于尝试 Druid 和进行教程练习。
这种单文件配置方法不适用于生产系统。对于生产环境,我们建议使用 DRUID_COMMON_CONFIG 和 DRUID_CONFIG_${service},或专门定制的、针对特定服务的环境文件。
配置
Druid Docker 容器的配置通过容器内设置的环境变量来完成。Docker Compose 将 environment file 中的值传递到容器中。这些变量还可以指定标准 Druid 配置文件的路径,这些文件必须在容器内可用。
默认值适用于快速入门。生产系统则需要修改这些默认值。
基础配置
DRUID_MAXDIRECTMEMORYSIZE-- 设置 Java 最大直接内存大小。默认值为 6 GiB。DRUID_XMX-- 设置 JavaXmx,即最大堆内存大小。默认值为 1 GB。
生产环境配置
DRUID_CONFIG_COMMON-- Druid 公共属性文件的完整路径DRUID_CONFIG_${service}-- Druid 服务属性文件的完整路径JAVA_OPTS-- 设置 Java 选项
日志配置
DRUID_LOG4J-- 设置整个log4j.xml配置文件的内容。(示例)DRUID_LOG_LEVEL-- 覆盖默认的 Log4j 日志级别DRUID_SERVICE_LOG4J-- 设置特定服务的log4j.xml配置文件内容。DRUID_SERVICE_LOG_LEVEL-- 覆盖特定服务 log4j 中的默认 Log4j 日志级别。
高级内存配置
DRUID_XMS-- 设置 JavaXms,即初始堆内存大小。默认值为 1 GB。DRUID_MAXNEWSIZE-- 设置 Java 最大新生代大小DRUID_NEWSIZE-- 设置 Java 新生代大小
除了上述特殊环境变量外,容器内启动 Druid 的脚本会将任何以 druid_ 为前缀的环境变量用作命令行配置。例如,环境变量
druid_metadata_storage_type=postgresql
会被转换为容器内 Druid 进程 Java 启动命令中的以下选项:
-Ddruid.metadata.storage.type=postgresql
请注意,Druid 使用 8888 端口作为控制台端口。此端口也被 Jupyter 等其他工具使用。为避免冲突,您可以在 docker-compose.yml 文件的 ports 部分更改端口。例如,要将控制台暴露在主机的 9999 端口:
container_name: router
...
ports:
- "9999:8888"
启动集群
使用 cd 进入包含配置文件的目录。该目录为您上面创建的目录,或者如果您已在本地安装了 Druid,则为 Druid 安装目录下的 distribution/docker/。
运行 docker compose up 以在当前 shell 界面下启动集群,或者运行 docker compose up -d 以在后台启动集群。
集群启动后,您可以访问 https://:8888 进入 Web 控制台。Druid router 进程负责提供 UI 服务。

所有 Druid 进程完全启动需要几秒钟时间。如果您在服务刚启动后立即打开控制台,可能会看到一些错误,这些错误通常可以忽略。
使用集群
现在您可以继续进行快速入门。对于生产环境,请根据需要优化 docker-compose.yml 文件,并添加任何额外的外部服务依赖。
您可以使用 Docker 进入 Druid 容器启动 shell:
docker exec -ti <id> sh
其中 <id> 是通过 docker ps 找到的容器 ID。Druid 安装在 /opt/druid。使用上述环境变量并启动 Druid 的 脚本位于 /druid.sh。
运行 docker compose down 可关闭集群。您的数据将以 Docker 卷的形式持久化,并在您重启 Druid 集群时可用。