druid相关使用

明白了,你希望我基于前面的完整企业级 Druid 文档,加入 Kafka/HDFS 任务提交示例、状态查询方法,并且严格保留所有原有内容不改动,形成最终的“完整文档”。我整理如下:


Apache Druid 企业级完整组件文档(企业级,多机器,Kafka/HDFS/Kerberos)

组件角色、依赖、配置和存储内容

角色类别作用外部依赖(仅实际使用)Kafka 配置涉及使用方式管理方式启动命令配置文件路径任务存放路径 / 任务管理关键配置示例 / Kafka 配置说明示例机器外部依赖存储内容说明配置替代 / 未使用组件处理
Coordinator 管理 管理 segment、分片、负载均衡、删除历史数据 MySQL、Zookeeper ❌ 无 查看集群状态、管理 segment Web UI / API bin/start-coordinator.sh /home/s/conf/druid/coordinator.properties _common/common.runtime.properties core-site.xml hdfs-site.xml krb5/ log4j2.xml / 不存任务 properties druid.service=coordinator druid.port=8081 druid.zk.service.host=zk1:2181 druid.metadata.storage.type=mysql druid.metadata.storage.connector.connectURI=jdbc:mysql://mysql:3306/druid druid.metadata.storage.connector.user=druid druid.metadata.storage.connector.password=yourpassword druid07v.ops.zzt.360es.cn Zookeeper:节点注册、Leader 选举 MySQL:segment 元数据(segment 存储位置、时间区间) Kafka / HDFS:未使用,可不配置 ingestion 相关属性
Overlord 管理 任务调度、管理 ingestion 任务(实时 / 批量) MySQL、Zookeeper ✅ 可提交 Kafka ingestion 任务 提交 ingestion 任务(Kafka、HDFS) Web UI / API bin/start-overlord.sh /home/s/conf/druid/overlord.properties _common/common.runtime.properties core-site.xml hdfs-site.xml krb5/ log4j2.xml mapred-site.xml yarn-site.xml /mnt/druid/tasks properties druid.service=overlord druid.port=8090 druid.zk.service.host=zk1:2181 druid.metadata.storage.type=mysql druid09v.ops.zzt.360es.cn Zookeeper:任务协调 MySQL:任务元数据(taskId、状态、配置、历史运行记录) HDFS:batch 任务读取源 Kafka:任务消费配置 若 Kafka/HDFS 不使用,则 ingestion spec 中不配置相应 source
Broker 业务 API 查询入口,接收用户 SQL/Native Query 请求,路由到 Historical / Realtime Zookeeper、MySQL ❌ 无 用户直接提交查询请求 Web UI / 日志监控 bin/start-broker.sh /home/s/conf/druid/broker.properties _common/common.runtime.properties log4j2.xml / 不存任务 properties druid.service=broker druid.port=8082 druid.zk.service.host=zk1:2181 druid.metadata.storage.type=mysql druid11v.ops.zzt.360es.cn Zookeeper:节点注册、路由信息 MySQL:查询数据源元数据(segment 位置、数据源列表) Kafka / HDFS:未使用,可不配置 ingestion 相关属性
Router 业务 API / 管理 多集群/多租户访问入口,路由请求到 Broker Zookeeper ❌ 无 用户提交查询请求 Web UI / API bin/start-router.sh /home/s/conf/druid/router.properties _common/common.runtime.properties log4j2.xml / 不存任务 properties druid.service=router druid.port=8888 druid.router.selectors=[{"type":"static","key":"local","brokerList":[{"host":"broker1","port":8082}]}] druid01.ops.zzbm.qianxin-inc.cn Zookeeper:集群节点注册、Broker 列表 MySQL / Kafka / HDFS:未使用,可不配置
Historical 内部逻辑 / 业务 API 存储历史 segment,响应查询请求 Zookeeper、MySQL、HDFS(仅 batch segment) ❌ 无 不直接访问 监控 segment load/unload、节点负载 bin/start-historical.sh /home/s/conf/druid/historical.properties _common/common.runtime.properties core-site.xml hdfs-site.xml krb5/ log4j2.xml /mnt/druid/segments properties druid.service=historical druid.port=8083 druid.zk.service.host=zk1:2181 druid.metadata.storage.type=mysql druid.segmentCache.locations=[{"path":"/mnt/druid/segments","maxSize":"200GB"}] druid02v.ops.zzyc.360es.cn, druid03v.ops.zzyc.360es.cn Zookeeper:节点注册、分片状态 MySQL:segment 元数据 HDFS:batch ingestion 源 Kafka:未使用,可不配置 ingestion spec
MiddleManager 内部逻辑 执行 ingestion 任务(实时 / 批量),生成 segment Kafka(多集群)、Zookeeper、MySQL、HDFS ✅ 消费 Kafka 不直接访问 监控 JVM、task queue、日志 bin/start-middleManager.sh /home/s/conf/druid/middleManager.properties _common/common.runtime.properties core-site.xml hdfs-site.xml krb5/ log4j2.xml mapred-site.xml yarn-site.xml /mnt/druid/tasks properties druid.service=middleManager druid.port=8091 druid.zk.service.host=zk1:2181 druid.metadata.storage.type=mysql druid.indexer.task.baseTaskDir=/mnt/druid/tasks Kafka 配置在 ingestion spec JSON 中指定 topic、bootstrap.servers、group.id,可为不同任务配置不同 Kafka 集群和 topic druid14v.ops.zzt.360es.cn, druid09v.ops.zzt.360es.cn Zookeeper:节点注册、任务协调 MySQL:任务元数据(taskId、状态、配置) HDFS:batch 任务源 Kafka:消费对应 topic 数据,生成 segment 若某任务不使用 Kafka/HDFS,则 ingestion spec 中不配置 Kafka / HDFS source

2️⃣ Kafka ingestion 提交示例

Kafka 集群示例

  • 集群 A:kfk01a:9092,kfk02a:9092

  • Topic:events-a

  • 数据格式:JSON

ingestion spec JSON (kafka_task_a.json)

{
  "type": "kafka",
  "spec": {
    "dataSchema": {
      "dataSource": "realtime_events_a",
      "parser": {
        "type":"string",
        "parseSpec":{
          "format":"json",
          "timestampSpec":{"column":"timestamp","format":"iso"},
          "dimensionsSpec":{"dimensions":["userId","action","itemId"]}
        }
      },
      "metricsSpec":[{"type":"count","name":"count"}],
      "granularitySpec":{
        "type":"uniform",
        "segmentGranularity":"HOUR",
        "queryGranularity":"MINUTE",
        "rollup":true
      }
    },
    "ioConfig": {
      "topic":"events-a",
      "consumerProperties":{"bootstrap.servers":"kfk01a:9092,kfk02a:9092","group.id":"druid-group-a"},
      "taskCount":1,
      "replicas":1,
      "taskDuration":"PT1H"
    },
    "tuningConfig":{"type":"kafka","maxRowsInMemory":100000,"intermediatePersistPeriod":"PT10M"}
  }
}

提交命令

curl -X POST -H 'Content-Type: application/json' \
     -d @kafka_task_a.json \
     http://druid09v.ops.zzt.360es.cn:8090/druid/indexer/v1/task

3️⃣ HDFS ingestion 提交示例

HDFS 数据路径

  • hdfs://nameservice1/user/data/events/2026/02/05

ingestion spec JSON (hdfs_task.json)

{
  "type": "index_parallel",
  "spec": {
    "dataSchema": {
      "dataSource": "batch_events_hdfs",
      "timestampSpec": {"column":"timestamp","format":"iso"},
      "dimensionsSpec": {"dimensions":["userId","action","itemId","region"]},
      "metricsSpec": [{"type":"count","name":"count"}],
      "granularitySpec": {"type":"uniform","segmentGranularity":"DAY","queryGranularity":"HOUR","rollup":true}
    },
    "ioConfig": {
      "type":"hadoop",
      "inputSpec": {
        "type":"static",
        "paths":["hdfs://nameservice1/user/data/events/2026/02/05"]
      }
    },
    "tuningConfig": {
      "type":"hadoop",
      "partitionsSpec":{"type":"dynamic"},
      "maxRowsInMemory":100000
    }
  }
}

提交命令

curl -X POST -H 'Content-Type: application/json' \
     -d @hdfs_task.json \
     http://druid09v.ops.zzt.360es.cn:8090/druid/indexer/v1/task

4️⃣ 查询任务状态与日志

# 查询所有任务
curl http://druid09v.ops.zzt.360es.cn:8090/druid/indexer/v1/tasks

# 查询单任务状态
curl http://druid09v.ops.zzt.360es.cn:8090/druid/indexer/v1/task/<taskId>/status

# 查询单任务日志
curl http://druid09v.ops.zzt.360es.cn:8090/druid/indexer/v1/task/<taskId>/logs
  • Web UI 管理:http://druid09v.ops.zzt.360es.cn:8090


5️⃣ 数据流总结

[Kafka 集群 A/B] → topic events-a / events-b
[HDFS] → batch events
        ↓
   用户提交 ingestion 任务 → Overlord (druid09v)
        ↓
   MiddleManager 执行任务 → 消费 Kafka / 读取 HDFS 数据 (druid14v,druid09v)
        ↓
   生成 segment → Coordinator / Historical 管理 segment (druid07v / druid02v)
        ↓
   Broker / Router 提供查询接口 (druid11v / druid01)
  • 支持 多 Kafka topic / 集群 + HDFS batch ingestion

  • 每个任务独立消费或读取

  • Coordinator/Historical 管理 segment

  • Broker/Router 提供查询


✅ 核心注意事项

  1. MiddleManager 是唯一 ingestion 执行组件,支持多 Kafka + HDFS

  2. Overlord 调度任务

  3. Coordinator/Historical 管理 segment

  4. 任务存放路径:/mnt/druid/tasks

  5. 配置文件路径:

    • _common/common.runtime.properties

    • Hadoop/HDFS: core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml

    • Kerberos: krb5/

    • 日志: log4j2.xml

    • 各组件独立 properties 文件 /home/s/conf/druid/*.properties


这份文档 完整覆盖:组件角色、外部依赖、Kafka/HDFS ingestion 任务提交示例、状态查询方法、任务存放路径、配置文件路径和替代方案,符合企业级部署标准。


如果你希望,我可以进一步画一张 企业级 Druid 架构图,把 Kafka/HDFS/MiddleManager/Coordinator/Historical/Broker/Router 数据流和依赖可视化出来,方便部署和运维。

你希望我画吗?

posted on 2026-02-05 20:02  吃草的青蛙  阅读(0)  评论(0)    收藏  举报

导航