Druid是面向实时OLAP的分布式列式时序数据库,非传统大数据仓库;安装需Java≥11、ZooKeeper协调、关系型元数据库(MySQL/PostgreSQL),且middleManager内存配置不当易致任务静默失败。

Druid 不是传统意义上的“大数据仓库”,它是一个面向实时 OLAP 的分布式列式时序数据库,安装方式和使用逻辑跟 Hive、ClickHouse 或 StarRocks 有本质区别。直接按“仓库”思路装,十有八九会卡在启动、元数据或 deep storage 配置上。
Java 版本必须 ≥11,否则连进程都起不来
Druid 自 0.23.0 起彻底放弃 Java 8 支持。常见错误包括:
UnsupportedClassVersionError- 日志里出现
Java version must be at least 11 - 进程秒退,
ps aux | grep java看不到任何 Druid 相关 JVM
生产环境建议用 openjdk-17-jre-headless(Debian/Ubuntu)或 java-17-openjdk-headless(RHEL/CentOS)。验证方式:
java -version
输出中必须含 11.、17. 或 21. 开头的版本号;同时确认 $JAVA_HOME 已设置且 $PATH 包含 $JAVA_HOME/bin。
quickstart 只能验证基础流程,不能代表部署成功
单机快速验证用 ./bin/start-micro-quickstart(新版)或 ./bin/start-all.sh(旧版),但要注意:
- 它把所有角色(
coordinator、overlord、broker、historical、middleManager)塞进一个 JVM,不模拟真实集群通信 - 默认用本地磁盘存 segment(
var/druid/segments)和元数据(var/druid/metadata),没走 MySQL/PostgreSQL - 不依赖 ZooKeeper,协调靠内存模拟 —— 所以哪怕控制台能打开、SQL 能跑通,也不代表生产配置可行
能访问 http://localhost:8888 且无 ERROR 日志,只说明“Druid 二进制包本身可运行”,不是“部署完成”。
生产部署必须配 ZooKeeper + 关系型元数据库
集群模式下,以下两项不可绕过:
-
ZooKeeper:唯一被官方支持的协调服务,
coordinator和overlord依赖它做 leader 选举与状态同步。路径需统一设为druid.zk.paths.base=/druid -
MySQL 或 PostgreSQL:存 datasource schema、segment 分配、task 状态等元数据。
druid.metadata.storage.type=mysql或postgresql,连接串、账号密码必须显式配置
关键配置集中在 conf/druid/cluster/_common/common.runtime.properties,例如:
druid.zk.service.host=zk1:2181,zk2:2181,zk3:2181<br>druid.metadata.storage.type=postgresql<br>druid.metadata.storage.connector.connectURI=jdbc:postgresql://pg:5432/druid<br>druid.metadata.storage.connector.user=druid<br>druid.metadata.storage.connector.password=secret
别漏掉扩展加载项:druid.extensions.loadList=["mysql-metadata-storage","druid-kafka-indexing-service"](按需增删)。
middleManager 内存参数错配会导致任务静默失败
middleManager 是实际执行 ingestion 任务的节点,但它不报错、不 Crash,只“卡住不动”——这是最常被忽略的坑。
-
druid.indexer.runner.javaOpts控制 JVM heap,必须留足空间给 task 进程 fork -
druid.indexer.task.heapMemoryMB是每个 task 的堆上限,不能超过 JVM 总 heap 的 70% -
druid.processing.buffer.sizeBytes影响中间聚合缓冲区,默认值太小,大数据量易 OOM
典型配置示例(16GB 物理内存机器):
druid.indexer.runner.javaOpts=-Xmx12g -XX:+UseG1GC<br>druid.indexer.task.heapMemoryMB=8192<br>druid.processing.buffer.sizeBytes=268435456
如果提交任务后,在 http://localhost:8090(overlord UI)看到 task 状态长期停留在 WAITING 或 PENDING,先查这三项。
真正难的不是解压启动,而是让 coordinator 能发现 historical、overlord 能调度 middleManager、broker 能从 metadata 拉到 segment 列表 —— 这些全靠 ZooKeeper 和元数据库联动。配置写错一行,整个链路就断在看不见的地方。











