必须分角色启动对应进程:coordinator与overlord共存于master节点并强耦合,historical与middlemanager可合设但需独立jvm配置,broker须直连所有historical且zookeeper地址全局一致,mysql元数据需显式启用并验证初始化,zookeeper路径与mysql字符集(utf8mb4)必须严格统一。

直接部署 Apache Druid 集群,必须分角色启动对应进程,不能靠单机脚本 start-micro-quickstart 顶替。集群失效、查询返回空或元数据不一致,90% 是因为没按角色拆分配置、ZooKeeper 连接错、或 MySQL 元数据没配对。
Coordinator 和 Overlord 必须共存于同一台 Master 节点
这两个进程职责不同但强耦合:Coordinator 管理 segment 分发与副本均衡,Overlord 调度 ingestion 任务(比如 Kafka indexing task),它们共享同一份 ZooKeeper 根路径和元数据源。若强行拆到不同机器且未同步 druid.zk.paths.base 或 druid.metadata.storage.*,会出现任务卡在 “WAITING”、segment 不加载、UI 显示 “No data sources found”。
实操建议:
- 把
conf/druid/cluster/master下的配置整体拷贝到 Master 节点,不要手动拼凑common.runtime.properties - 确保
druid.host设为该节点可被其他节点解析的 hostname 或 IP(不是localhost) - MySQL 元数据连接必须显式启用:
druid.metadata.storage.type=mysql,并取消注释全部druid.metadata.storage.connector.*行 - 首次启动前,用
mysql -udruid -p -h your-mysql-host -e "USE druid; SHOW TABLES;"验证库表已初始化(Druid 不自动建表)
Historical 和 MiddleManager 可合并在 Data 节点,但 JVM 参数不能照搬
两者都吃内存和磁盘 I/O,但用途完全不同:Historical 加载 segment 并响应查询,MiddleManager 启动 Peon 进程执行实时摄入任务。共存时若共用同一份 jvm.config,容易因 GC 压力互相干扰——比如 ingestion 峰值触发 Full GC,导致 Historical 查询超时。
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
实操建议:
- 分开配置
conf/druid/cluster/data/historical/jvm.config和middleManager/jvm.config - Historical 推荐堆内存设为物理内存的 50%~60%,且加
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 - MiddleManager 堆内存建议 ≤8GB,避免 Peon 进程启动失败(
java.lang.OutOfMemoryError: unable to create new native thread) - 确认
druid.segmentCache.locations指向本地 SSD 路径,且目录有写权限(如/data/druid/segments)
Broker 必须能直连所有 Historical 节点,且不能共享 ZooKeeper session
Broker 自身不存数据,它靠从 ZooKeeper 获取当前活跃的 Historical 列表来路由查询。如果 Broker 与某个 Historical 网络不通、或它们连了不同 ZooKeeper 集群(比如 Broker 连 node3:2181,Historical 连 node4:2181),就会出现部分数据源查不到、或查询返回 "No results" 却无报错。
实操建议:
- 所有节点(包括 Broker)的
druid.zk.service.host必须指向同一套 ZooKeeper 集群地址,格式为host1:2181,host2:2181,host3:2181 - Broker 的
druid.broker.http.port和druid.host要对外可访问,否则 Router 和外部 BI 工具连不上 - 检查
druid.broker.cache.useCache和druid.broker.cache.populateCache是否按需开启——生产环境缓存开太多反而拖慢首次查询 - 启动后立刻执行:
curl http://broker-host:8082/status/health和curl http://broker-host:8082/druid/v2/datasources,确认返回 HTTP 200 且有数据源列表
最易被忽略的是 ZooKeeper 路径一致性与 MySQL 字符集。哪怕只有一处 druid.zk.paths.base=/druid-test 写成 /druid,整个集群的 segment 注册就会分裂;MySQL 若没用 utf8mb4 而用默认 latin1,插入含 emoji 或四字节 UTF-8 的维度值时会静默截断,查不出来还找不到原因。










