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)通信异常导致:
- 检查核心服务可用性
- 直接访问 Druid 各服务端口:
- Coordinator:
http://<宿主机IP>:8081 - Overlord:
http://<宿主机IP>:8090 - Broker:
http://<宿主机IP>:8082
- Coordinator:
- 若某服务无法访问,查看对应容器日志:
docker logs <druid-coordinator-container-name> docker logs <druid-overlord-container-name> docker logs <druid-broker-container-name>
- 直接访问 Druid 各服务端口:
- 确认索引服务配置
- 检查 Druid environment 配置中
druid.indexer.runner.type是否为remote(默认值,若设为local会限制批量任务执行)
- 检查 Druid environment 配置中
- 查看 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
相关产品推荐
相关产品推荐

