You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose部署Druid接入Kafka遇采样无数据及网关错误

Druid 接入 Kafka 及批量导入问题排查方案

问题概述

  • Druid、Kafka 均通过独立 Docker Compose 部署,共享外部网络 oob
  • Kafka records 主题可正常被 Python 生产者/消费者访问,但 Druid Web 界面连接时显示 No data returned from sampler
  • 批量导入 Druid 维基百科示例数据时出现 Bad Gateway 错误
  • 所有容器运行正常,尝试容器 IP 连接无效

一、先解决「Bad Gateway」错误

该错误通常是 Druid 内部服务(Broker/Router/Overlord)通信异常导致:

  1. 检查核心服务可用性
    • 直接访问 Druid 各服务端口:
      • Coordinator: http://<宿主机IP>:8081
      • Overlord: http://<宿主机IP>:8090
      • Broker: http://<宿主机IP>:8082
    • 若某服务无法访问,查看对应容器日志:
      docker logs <druid-coordinator-container-name>
      docker logs <druid-overlord-container-name>
      docker logs <druid-broker-container-name>
      
  2. 确认索引服务配置
    • 检查 Druid environment 配置中 druid.indexer.runner.type 是否为 remote(默认值,若设为 local 会限制批量任务执行)
  3. 查看 MiddleManager 日志
    批量导入任务由 MiddleManager 执行,检查日志是否有任务启动失败信息:
    docker logs <druid-middlemanager-container-name>
    

二、解决 Kafka 连接「No data returned from sampler」问题

1. 修正 Kafka 监听配置

Kafka 的advertised.listeners必须包含 Druid 所在网络可访问的地址,否则 Druid 会收到无效的 broker 地址:

  • 打开 Kafka docker-compose.yml,确保 environment 配置如下(替换kafka为你的 Kafka 服务名):
    environment:
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:9094
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:9094
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
    
  • 重启 Kafka 容器:docker-compose restart kafka

2. 调整 Druid Kafka 数据源配置

在 Druid Web 界面配置 Kafka 数据源时:

  • Bootstrap servers 填写 Kafka 服务名+端口:kafka:9092(而非宿主机 IP/localhost,因为容器在同一网络,可通过服务名直接访问)
  • 确保Topic名称为records,且当前有生产者向该主题发送数据(采样器需要实时数据才能返回结果)
  • 若 Kafka 无特殊认证,Consumer properties留空即可

3. 验证跨容器网络连通性

  • 进入 Druid MiddleManager 或 Broker 容器,测试与 Kafka 的连通性:
    # 进入容器
    docker exec -it <druid-middlemanager-container-name> /bin/bash
    # ping Kafka 服务名,检查是否能连通
    ping kafka
    # 测试端口是否开放
    nc -zv kafka 9092
    
  • 若无法连通,检查docker network inspect oob,确认两个服务的容器都在该网络内

4. 检查 Druid 网络配置

确保 Druid docker-compose.yml 中所有服务都加入了oob网络:

networks:
  - oob

三、配置文件检查要点

Druid docker-compose.yml

  • 确认所有服务的networks字段指向oob
  • 检查DRUID_COMMON_RUNTIME_PROPERTIES中的druid.host,建议设置为容器名(如druid-broker),确保内部服务通信正常

Kafka docker-compose.yml

  • 确认服务加入oob网络
  • 重点验证KAFKA_ADVERTISED_LISTENERS,必须包含内部网络可访问的地址(服务名/容器 IP)

内容的提问来源于stack exchange,提问作者Jeremy Tarrieu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:33:16