Docker Spring引导容器无法连接到Kafka容器
我正在尝试将microservicesDocker Spring引导容器无法连接到Kafka容器,docker,spring-boot,apache-kafka,docker-compose,Docker,Spring Boot,Apache Kafka,Docker Compose,我正在尝试将microservicesSpring Boot与Kafka一起使用,但我的Spring Boot容器无法连接到Kafka容器 docker compose.yml: version: '3' services: zookeeper: image: wurstmeister/zookeeper container_name: zookeeper restart: always ports: - 2181:2181 kafka:
Spring Boot
与Kafka
一起使用,但我的Spring Boot
容器无法连接到Kafka
容器
docker compose.yml
:
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
restart: always
ports:
- 2181:2181
kafka:
image: wurstmeister/kafka
container_name: kafka
restart: always
ports:
- 9092:9092
depends_on:
- zookeeper
links:
- zookeeper:zookeeper
environment:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
consumer:
image: consumer
container_name: consumer
depends_on:
- kafka
restart: always
ports:
- 8084:8080
depends_on:
- kafka
links:
- kafka:kafka
producer:
image: producer
container_name: producer
depends_on:
- kafka
restart: always
ports:
- 8085:8080
depends_on:
- kafka
links:
- kafka:kafka
消费者中的应用程序属性:
spring.kafka.consumer.bootstrap-servers=kafka:9092
spring.kafka.consumer.group-id=WorkUnitApp
spring.kafka.consumer.topic=kafka_topic
spring.kafka.consumer.bootstrap-servers=0.0.0.0:9092
spring.kafka.consumer.group-id=WorkUnitApp
spring.kafka.consumer.topic=kafka_topic
生产者中的应用程序属性:
spring.kafka.producer.bootstrap-servers=kafka:9092
spring.kafka.producer.bootstrap-servers=0.0.0.0:9092
但是如果我在容器中运行Kafka
,并且Spring-Boot
microservices在本地运行,它就会工作。
消费者中的应用程序属性:
spring.kafka.consumer.bootstrap-servers=kafka:9092
spring.kafka.consumer.group-id=WorkUnitApp
spring.kafka.consumer.topic=kafka_topic
spring.kafka.consumer.bootstrap-servers=0.0.0.0:9092
spring.kafka.consumer.group-id=WorkUnitApp
spring.kafka.consumer.topic=kafka_topic
生产者中的应用程序属性:
spring.kafka.producer.bootstrap-servers=kafka:9092
spring.kafka.producer.bootstrap-servers=0.0.0.0:9092
问题是什么,为什么来自docker
的链接不起作用
p、 s.0.0.0.0因为mac os
编辑
我将docker compose.yml
环境添加到kafka
中,但它仍然不起作用
- KAFKA_ADVERTISED_PORT=9092
您需要将您的Kafka代理发布为Kafka
,这是所有链接容器的有效主机名(即客户端需要从Kafka协议角度连接的主机名,因此Kafka:9092
是正确的,而不是0.0.0
):
我们处于相同的情况,我不确定这是如何工作的,但我们能够使用文档示例(内部/外部部分)中描述的多协议设置,以一种可以从外部和内部连接到容器的方式设置容器:您是在mac还是Linux上?您是否尝试过将KAFKA_adverted_HOST_NAME
设置为KAFKA
?@Thilo我看了一下,但没有成功(内部/外部)。我的意思是相反的-您尝试过KAFKA_adverted_HOST_NAME=KAFKA
“adverted HOST NAME”和“bootstrap server”之间的区别是什么在卡夫卡配置中?我无法从中找出答案documentation@voipp“公布的主机名”告诉节点它应该如何向世界展示自己(即其他集群成员应该如何连接到它)。“引导服务器”定义了Kafka节点列表,该列表应用于初始设置(即获取集群成员的实际列表)。感谢帮助。从kafka客户端(即kafkaTool)的角度来看,它将连接到哪个主机?来自播发主机或引导服务器的主机(如果它们不同)。您可能有一篇很好的文章来解释这些主题吗?@voipp客户端将连接到引导服务器,以获取要连接的活动节点列表。该列表上的条目将是每个服务器的播发主机名(+播发端口)。如果您有一个具体的设置问题,您可能应该打开一个新问题,因为这超出了初始问题的范围(即,为什么客户端不能连接到Docker中的Kafka服务器)。另外,请记住,给定属性的作用域通常是特定的。为了澄清,bootstrap.servers
是客户端属性,而不是代理/服务器属性。我的第一个评论可能有点误导。服务器使用ZooKeeper进行内部同步。