Druid在Linux上必须使用Java 11+,官方自0.23.0起不再支持Java 8;生产环境推荐OpenJDK 17 headless版,并需正确配置JAVA_HOME和PATH;quickstart仅用于单机功能验证,不可用于生产;生产部署必须依赖ZooKeeper协调和MySQL/PostgreSQL元数据存储;middleManager内存参数需合理设置,否则任务会静默失败。

Druid 在 Linux 上必须用 Java 11+,别试 Java 8 —— 启动直接报 UnsupportedClassVersionError 或明确提示 Java version must be at least 11,就是它。
Java 版本和环境变量必须一步到位
Druid 从 0.23.0 起彻底放弃 Java 8 支持。OpenJDK 11/17/21 都行,但生产环境强烈建议固定用 openjdk-17-jre-headless(Debian/Ubuntu)或 java-17-openjdk-headless(RHEL/CentOS),避免 GUI 相关依赖污染。
验证是否到位,只看两点:
-
java -version输出含11.、17.或21.开头的版本号 -
$JAVA_HOME已设为 JDK 根目录,且该路径已加入$PATH
别信 which java —— 它可能指向系统默认的旧版 JRE;务必确认 $JAVA_HOME/bin/java -version 的输出。
quickstart 只能验证“能不能动”,不是部署流程
执行 ./bin/start-micro-quickstart(新版)或 ./bin/start-all.sh(旧版)后,若日志里出现 Started o.e.j.s.h.ContextHandler@ 且无 ERROR 行,http://localhost:8888 能打开控制台,说明单机功能通了。
但这只是把所有进程塞进一个 JVM,deep storage 和 metadata store 全用本地磁盘,**不走 ZooKeeper,也不连 MySQL/PostgreSQL**。它连“伪集群”都算不上,更不能代表生产能力。
常见误操作:
- 把
quickstart当成上线方案,后续数据量一上来就静默失败 - 没删
var/目录直接重跑,导致端口冲突或元数据错乱 - 导入
quickstart/tutorial/wikiticker-2015-09-12-sampled.json.gz后,误以为 ingestion pipeline 已就绪 —— 实际它绕过了 real-time ingestion 所需的 middleManager + overlord 协调链
生产部署必须配齐 ZooKeeper 和关系型 metadata store
coordinator 和 overlord 进程强依赖分布式协调服务,ZooKeeper 是目前唯一被官方支持的选项;metadata store(存 datasource schema、segment 分配、task 状态等)必须用 MySQL 5.7+/8.0 或 PostgreSQL 10+ —— PostgreSQL 对时区和 JSON 类型处理更稳,推荐优先选。
关键配置项在 conf/druid/_common/common.runtime.properties 中:
-
druid.zk.service.host=localhost:2181(ZooKeeper 地址) -
druid.metadata.storage.connector.connectURI=jdbc:postgresql://localhost:5432/druid(PostgreSQL 示例) -
druid.metadata.storage.connector.user=druid和密码项也得填全
middleManager 的内存参数容易被忽略:druid.middlemanager.defaultHeapMemory 和 druid.indexer.task.buffer.sizeBytes 若设得太小,任务会卡在 “RUNNING” 状态不报错,实际已静默失败。
启动脚本选型取决于硬件,不是越“大”越好
Druid 提供了 start-nano-quickstart 到 start-xlarge 一系列预设脚本,对应不同资源配置。别盲目选 start-medium —— 它默认吃掉 128GB 内存,而你的机器只有 32GB,结果就是 OOM 后反复重启。
实操建议:
- 测试环境:用
start-micro-quickstart(4 CPU / 16GB RAM)足够 - 准生产单节点:改用
conf/druid/single-server/small目录下的配置,并手动调低jvm.config中的-Xms/-Xmx(比如设为-Xms4g -Xmx4g) - 所有自定义配置修改后,必须检查
conf/druid/_common是否被正确 include,否则 broker/historical 等进程读不到元数据连接参数
最常被跳过的一步:启动前没运行 ./bin/verify-java 和 ./bin/verify-default-ports —— 后者会告诉你 8081/8082/8090 等端口是否已被占用,省去一半排查时间。


















