首页 > 解决方案 > Spring Boot App 拒绝连接到 Kafka 代理

问题描述

所以我最近才开始使用 Kafka,出于某种奇怪的原因,尽管 kafka 和 zookeeper 服务器容器按照文档中的预期运行,并且使用命令 docker ps。我不断收到此特定错误

在此处输入图像描述

我一直在尝试使用不同的配置解决这个问题大约一个星期,但它仍然给我一个无限循环的错误。

我遵循了这两个教程: https ://rmoff.net/2018/08/02/kafka-listeners-explained/和https://www.youtube.com/watch?v=-0vrqMMGQbc

docker-compose up 运行得非常好并且代理启动但是当我启动 mvn spring-boot:run 命令时它失败了。

我也尝试通过我的本地机器更改地址,但仍然没有。将不胜感激一些帮助

这是我的 docker-compose.yml

version: '3.2'
services:
  zookeeper:
    container_name: zookeeper
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
  kafka:
    container_name: kafka
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: INTERNAL://:19092,EXTERNAL://:9092
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:19092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
    depends_on:
      - zookeeper
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

这是我的 application.yml

# Server
server:
  port: 8090

# Spring Kafka & H2
spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration
  kafka:
    bootstrap-servers: localhost:9092
  h2:
    console:
      enabled: true
      path: /h2
  datasource:
    url: jdbc:h2:mem:api;MODE=MySQL
    username: api
    password: root
    driverClassName: org.h2.Driver

result:
  topic.name: result

# Keycloak
keycloak:
  auth-server-url: http://localhost:8080/auth
  realm: demo
  resource: demo-api
  enabled: false
  public-client: false
  bearer-only : true
  principal-attribute: preferred_username
  allow-any-hostname: true

#  credentials:
#    secret:

# Logging
logging:
  level:
    org.springframework.web: DEBUG
    org.hibernate: DEBUG
    org: INFO
    com.API.demo.Controllers: DEBUG
  config: src/main/resources/logback-spring.xml
  file:
    path: logs/log

标签: spring-bootdockerapache-kafkadocker-composeapache-zookeeper

解决方案


未正确定义 Advertised Listener

代替

  KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:19092

你需要

  KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:19092,EXTERNAL://localhost:9092

另请注意,如果您希望代理自动创建主题,您需要设置

  KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'

推荐阅读