Quarkus Kafka Docker 网络 属性
Quarkus Kafka Docker Network Property
我们的问题是内部属性 kafka.bootstrap.servers不会被kafka:9092覆盖。
我们的容器仍然尝试访问 localhost:9092.
我们在 docker-compose.yml 文件中为每个微服务的环境设置:
环境:
- kafka.bootstrap.servers=kafka:9092
每个 MS
的属性也相同
有没有办法覆盖这个属性?
编辑:
docker-compose.yml 文件的重要部分:
services:
zookeeper:
image: strimzi/kafka:0.19.0-kafka-2.5.0
command:
["sh", "-c", "bin/zookeeper-server-start.sh config/zookeeper.properties"]
ports:
- "2181:2181"
environment:
LOG_DIR: /tmp/logs
kafka:
image: strimzi/kafka:0.19.0-kafka-2.5.0
command:
[
"sh",
"-c",
"bin/kafka-server-start.sh config/server.properties --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}",
]
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
LOG_DIR: "/tmp/logs"
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
authentication-service:
build:
context: implementation/authentication
dockerfile: src/main/docker/Dockerfile.jvm
environment:
- quarkus.mongodb.connection-string=mongodb://mongodb:27017
- KAFKA_BOOTSTRAP_SERVERS=kafka:9092
container_name: authentication-service-ase
depends_on:
- mongodb
- kafka
我们不断收到的错误是:
cart-service-ase |
cart-service-ase | {
cart-service-ase | "timestamp": "2021-06-02 12:19:48",
cart-service-ase | "sequence": 378,
cart-service-ase | "loggerClassName": "org.apache.kafka.common.utils.LogContext$LocationAwareKafkaLogger",
cart-service-ase | "loggerName": "org.apache.kafka.clients.NetworkClient",
cart-service-ase | "level": "WARN",
cart-service-ase | "message": "[Consumer clientId=kafka-consumer-checkout-out, groupId=cart] Connection to node 0 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.",
cart-service-ase | "threadName": "vert.x-kafka-consumer-thread-1",
cart-service-ase | "threadId": 38,
cart-service-ase | "mdc": {
cart-service-ase | },
cart-service-ase | "ndc": "",
cart-service-ase | "hostName": "34e4de1e7647",
cart-service-ase | "processName": "quarkus-run.jar",
cart-service-ase | "processId": 1
cart-service-ase | }
您需要 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
,因为您不能将 localhost 通告给同一网络中的其他容器。如错误所述,消费者容器正在尝试连接自身,而不是 Kafka 容器。
但是,您需要验证命令中的覆盖标志是否确实正确设置了 属性
我们的问题是内部属性 kafka.bootstrap.servers不会被kafka:9092覆盖。 我们的容器仍然尝试访问 localhost:9092.
我们在 docker-compose.yml 文件中为每个微服务的环境设置: 环境: - kafka.bootstrap.servers=kafka:9092 每个 MS
的属性也相同有没有办法覆盖这个属性?
编辑: docker-compose.yml 文件的重要部分:
services:
zookeeper:
image: strimzi/kafka:0.19.0-kafka-2.5.0
command:
["sh", "-c", "bin/zookeeper-server-start.sh config/zookeeper.properties"]
ports:
- "2181:2181"
environment:
LOG_DIR: /tmp/logs
kafka:
image: strimzi/kafka:0.19.0-kafka-2.5.0
command:
[
"sh",
"-c",
"bin/kafka-server-start.sh config/server.properties --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}",
]
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
LOG_DIR: "/tmp/logs"
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
authentication-service:
build:
context: implementation/authentication
dockerfile: src/main/docker/Dockerfile.jvm
environment:
- quarkus.mongodb.connection-string=mongodb://mongodb:27017
- KAFKA_BOOTSTRAP_SERVERS=kafka:9092
container_name: authentication-service-ase
depends_on:
- mongodb
- kafka
我们不断收到的错误是:
cart-service-ase |
cart-service-ase | {
cart-service-ase | "timestamp": "2021-06-02 12:19:48",
cart-service-ase | "sequence": 378,
cart-service-ase | "loggerClassName": "org.apache.kafka.common.utils.LogContext$LocationAwareKafkaLogger",
cart-service-ase | "loggerName": "org.apache.kafka.clients.NetworkClient",
cart-service-ase | "level": "WARN",
cart-service-ase | "message": "[Consumer clientId=kafka-consumer-checkout-out, groupId=cart] Connection to node 0 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.",
cart-service-ase | "threadName": "vert.x-kafka-consumer-thread-1",
cart-service-ase | "threadId": 38,
cart-service-ase | "mdc": {
cart-service-ase | },
cart-service-ase | "ndc": "",
cart-service-ase | "hostName": "34e4de1e7647",
cart-service-ase | "processName": "quarkus-run.jar",
cart-service-ase | "processId": 1
cart-service-ase | }
您需要 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
,因为您不能将 localhost 通告给同一网络中的其他容器。如错误所述,消费者容器正在尝试连接自身,而不是 Kafka 容器。
但是,您需要验证命令中的覆盖标志是否确实正确设置了 属性