Docker Spring引导容器无法连接到Kafka容器

Docker 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:

我正在尝试将microservices
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进行内部同步。