首页 > 解决方案 > 无法从 Spring Boot 应用程序连接到托管在云中的 kafka

问题描述

谷歌云平台中的kafka虚拟机地址为xx.xx.xxx.xxx.

从我通常连接到本地机器的kafka服务器的localhost:9092的本地spring boot应用程序中,我将其更改为GCP的虚拟机的ip为xx.xx.xxx.xxx:9092

但是服务器启动时会发出警告

2020-04-05 15:30:41.356  WARN 7968 --- [| adminclient-4] org.apache.kafka.clients.NetworkClient   : [AdminClient clientId=adminclient-4] Connection to node -1 could not be established. Broker may not be available.

并最终超时。是否应该有不同的方式从 springboot 应用程序连接到云 kafka?

标签: google-cloud-platformapache-kafka

解决方案


您需要在 GCP VM 上正确配置代理,advertised.listener以便您的客户端在初始成功连接后从其接收正确的主机名/IP。

advertised.listeners您可以使用设置验证连接和代理元数据kafkacat -L

$ kafkacat -b xx.xx.xxx.xxx:9092 -L
Metadata for all topics (from broker -1: xx.xx.xxx.xxx:9092/bootstrap):
1 brokers:
  broker 0 at a.b.c.d:9092

返回的a.b.c.d.应该是您的客户端可以成功解析到代理本身的 IP 或主机名(不是环回地址、内部网络 IP 等)。

要了解更多信息,请参阅https://rmoff.net/2018/08/02/kafka-listeners-explained/


推荐阅读