如何更改 Spring Cloud Stream Kafka 活页夹的目标?

How to change target of the Spring Cloud Stream Kafka binder?

使用 Spring Cloud Stream 2.1.4 和 Spring Boot 2.1.10,我正在尝试定位 Kafka 的本地实例。 这是到目前为止我的项目配置的摘录:

spring.kafka.bootstrap-servers=PLAINTEXT://localhost:9092
spring.kafka.streams.bootstrap-servers=PLAINTEXT://localhost:9092
spring.cloud.stream.kafka.binder.brokers=PLAINTEXT://localhost:9092
spring.cloud.stream.kafka.binder.zkNodes=localhost:2181
spring.cloud.stream.kafka.streams.binder.brokers=PLAINTEXT://localhost:9092
spring.cloud.stream.kafka.streams.binder.zkNodes=localhost:2181

但是活页夹一直在调用错误的目标:

java.io.IOException: Can't resolve address: kafka.example.com:9092

如果这些属性不起作用,我该如何指定目标? 此外,我通过 Docker Bitnami 图像部署了 Kafka 实例,我不想使用 SSL 配置(请参阅 PLAINTEXT 协议),但我没有找到基本凭据登录的属性。有谁知道这是否无望?

这是我的docker-compose.yml

version: '3'
services: 
  zookeeper:
    image: bitnami/zookeeper:latest
    container_name: zookeeper
    environment:
      - ZOO_ENABLE_AUTH=yes
      - ZOO_SERVER_USERS=kafka
      - ZOO_SERVER_PASSWORDS=kafka_password
    networks:
      - kafka-net
  kafka:
    image: bitnami/kafka:latest
    container_name: kafka
    hostname: kafka.example.com
    depends_on:
      - zookeeper
    ports:
      - 9092:9092
    environment:
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - KAFKA_ZOOKEEPER_USER=kafka
      - KAFKA_ZOOKEEPER_PASSWORD=kafka_password
    networks:
      - kafka-net
networks:
  kafka-net:
    driver: bridge

提前致谢

好吧:通过两次查看 "dockerfile"(感谢 cricket_007)使它起作用:

kafka:
...
    hostname: localhost

郑重声明:我可以删除上面的所有属性,默认为 Kafka localhost:9092

hostname 不是问题,而是导致主机名被广告的广告侦听器 protocol//:port 映射,默认情况下。您应该更改它,而不是主机名。

  kafka:
    image: bitnami/kafka:latest
    container_name: kafka
    hostname: kafka.example.com # <--- Here's what you are getting in the request
    ...
    environment:
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092 # <--- This returns the hostname to the clients

如果您计划 运行 您的代码 在另一个容器之外 ,您应该通告 localhost 除了容器主机名之外,或者代替容器主机名。

One year later, my comment still is not been merged into the bitnami README,在那里我能够使用以下变量(更改以匹配您的部署)

KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_CFG_LISTENERS=PLAINTEXT://:29092,PLAINTEXT_HOST://:9092
KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka.example.com:29092,PLAINTEXT_HOST://localhost:9092