Ind*_*ial 7 apache-kafka docker docker-compose
我正在尝试使用 Docker 和 Docker Compose 运行 Kafka。这是docker-compose.yml:
version: "2"
services:
zookeeper:
image: "wurstmeister/zookeeper"
ports:
- "2181:2181"
kafka:
build:
context: "./services/kafka"
dockerfile: "Dockerfile"
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: "0.0.0.0"
KAFKA_CREATE_TOPICS: "test:1:1"
KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
users:
build:
context: "./services/users"
dockerfile: "Dockerfile"
ports:
- "4001:4001"
environment:
NODE_ENV: "develop"
ZOOKEEPER_HOST: "zookeeper"
ZOOKEEPER_PORT: "2181"
volumes:
- "./services/users:/service"
Run Code Online (Sandbox Code Playgroud)
用户服务仅尝试连接(在 Node.js 中使用 kafka-node)并侦听主题并在每次运行时向其发布一条消息。
问题是我不断收到连接拒绝错误。我使用Dockerize等待卡夫卡端口是在供Dockerfile与线CMD dockerize -wait tcp://kafka:9092 node /service/index.js。
它在启动用户容器之前等待端口可用并且该系统可以工作,但它不是在正确的时间。看来Kafka在选举出leader之前就打开了9092端口。
当我首先运行 Kafka 并让它完全启动然后运行我的应用程序时,它运行顺利。
如何在开始服务之前等待正确的时间?
尝试 docker-compose 2.1 或 3 版,因为它包含一个healthcheck指令。
以“ Docker Compose 在启动 Y 之前等待容器 X ”为例。
你可以:
depends_on:
kafka:
condition: service_healthy
Run Code Online (Sandbox Code Playgroud)
并在 kafka 添加:
healthcheck:
test: ["CMD", ...]
interval: 30s
timeout: 10s
retries: 5
Run Code Online (Sandbox Code Playgroud)
curl例如,使用一个命令来测试 kafka 是否已经选举了一个领导者。
| 归档时间: |
|
| 查看次数: |
5016 次 |
| 最近记录: |