Spring Boot App 拒绝连接到 Kafka 代理
Posted
技术标签:
【中文标题】Spring Boot App 拒绝连接到 Kafka 代理【英文标题】:Spring Boot App refuses to connect to the Kafka brokers 【发布时间】:2020-08-13 16:21:20 【问题描述】:所以我最近才开始使用 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
【问题讨论】:
不知道这是否会导致问题,但在您撰写的 kafka 服务中,我会将环境变量放在引号中。值中有很多字符可能会吓坏它。 您正在使用来自 Confluent docker 镜像 (cp-kafka
) 的环境变量和不同的镜像。您打算使用哪一个?您的 Spring 代码是在 Docker 主机本地运行,还是在容器中运行?
J.Scott,我之前只尝试过 3 个环境变量,就像 youtube 示例一样,但遗憾的是它仍然有同样的错误。还有@RobinMoffatt,我正在使用wurstmeister,我看到一些gitrepos使用相同的图像和环境变量,在我克隆它们后它们运行良好,是的,它在本地运行,而不是在容器中。
【参考方案1】:
Advertised Listener 定义不正确
代替
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:19092
你需要
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:19092,EXTERNAL://localhost:9092
另请注意,如果您希望代理自动创建主题,您需要设置
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
【讨论】:
可悲的是还是同样的错误,我也配置了一个 kafkaadmin 这就是我禁用 create_topic 的原因 您在进行更改后是否重新启动了代理?重新启动它后,代理日志中的adverted.listeners 是什么? (docker logs kafka|grep listener
)
抱歉这个愚蠢的问题,但我在哪里可以找到 docker 的日志文件?我试图在目录中找到它,但它似乎不存在以上是关于Spring Boot App 拒绝连接到 Kafka 代理的主要内容,如果未能解决你的问题,请参考以下文章
docker compose:spring boot连接到mysql数据库被拒绝
可怕的 Java Spring Boot 应用程序未使用 Docker-compose java.net.ConnectException 连接到 MySQL:连接被拒绝
带有反应式 mongodb 的 Spring Boot 不断尝试连接到 localhost
是否可以将 Spring Boot 应用程序部署到 App Engine 并连接到数据库?
Spring Boot 应用在部署到 Google App Engine 时无法连接到 Google Cloud SQL (PostgreSQL)