我尝试使用Bitnami打包的Kafka Exporter,https://github.com/bitnami/bitnami-docker-kafka-exporter,以及Kafka的Bitnami镜像,https://github.com/bitnami/bitnami-docker-kafka。我正在尝试运行以下docker-compose.yml
:
version: '2'
networks:
app-tier:
driver: bridge
services:
zookeeper:
image: 'bitnami/zookeeper:latest'
environment:
- 'ALLOW_ANONYMOUS_LOGIN=yes'
networks:
- app-tier
kafka:
image: 'bitnami/kafka:latest'
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
networks:
- app-tier
kafka-exporter:
image: bitnami/kafka-exporter:latest
ports:
- "9308:9308"
command:
- --kafka.server=kafka:9092
但是,如果我用docker-compose up
运行它,我会得到以下错误:
bitnami-docker-kafka-kafka-exporter-1 | F0103 17:44:12.545739 1 kafka_exporter.go:865] Error Init Kafka Client: kafka: client has run out of available brokers to talk to (Is your cluster reachable?)
我尝试使用How to pass arguments to entrypoint in docker-compose.yml的答案为kafka-exporter
服务指定command
,假设入口点是以exec形式定义的,应该在Docker Exporter二进制文件的调用中附加额外的标志。然而,似乎kafka:9092
的值不适合kafka.server
标志的值,或者标志没有被选中,或者可能存在某种竞争条件,即导出器失败并在Kafka启动和运行之前退出。有什么想法可以让这个例子发挥作用吗?
3条答案
按热度按时间e4yzc0pl1#
这似乎只是由于Kafka Exporter在启动之前试图连接到Kafka的竞争条件引起的。如果我只运行
docker-compose up
并允许Kafka Exporter失败,然后单独运行danielqsh/kafka-exporter
容器,它就可以工作了:在http://localhost:9308上,我可以看到指标:
更新
一种更可靠的方法是使用 Package 器脚本来执行特定于应用程序的健康检查,如https://docs.docker.com/compose/startup-order/中所述。使用以下目录结构,
下面的
Dockerfile
,以及下面的
run.sh
,以及下面的
docker-compose.yml
,在运行
docker-compose build && docker-compose up
时,我可以从日志中看到,大约2秒后(第三次尝试),Kafka Exporter成功启动:nkoocmlb2#
运行kafka-exporter所需的所有依赖项有点困难。我自己做了几个简单的步骤如下。
步骤1
第二步
第三步
第四步
如果你注意到上面的命令,我使用了“host.docker.internal”,这将有助于kafka-exporter在我的机器上监听localhost。
brccelvz3#
healthcheck的想法真的很好,但它可以做得更容易,没有扩展图像和添加新的脚本。更多细节可以在这里找到:https://adw0rd.com/2020/11/25/kafka-healthcheck-by-topic/en/。