Spring Boot Kafka AdminClient无法连接REST端口,明文端口正常
问题排查与解决方案
核心原因
Kafka REST端口(8082)是Confluent REST Proxy的服务端口,仅支持HTTP/REST协议操作Kafka;而Spring Boot/Spring Cloud Streams底层使用的Kafka原生客户端(AdminClient、Producer、Consumer等)需要连接Kafka Broker的明文二进制协议端口(即你看到的40305),两者协议不兼容,因此用8082无法建立连接。
修复步骤
修改application.properties中的Kafka bootstrap配置,将REST端口替换为Broker明文端口:
spring.application.name=spring-cloud-streams-kafka server.port=8080 spring.kafka.bootstrap-servers=localhost:40305 # 替换为Broker明文端口 spring.cloud.function.definition=PageEventConsumer
如果Spring Cloud Streams需要单独配置Broker地址,可额外添加:
spring.cloud.stream.kafka.binder.brokers=localhost:40305
问题背景信息
以下是你提供的项目配置与错误日志:
控制器代码
@RestController @RequiredArgsConstructor public class PageEventRestController { private final StreamBridge streamBridge; @GetMapping("publish/{topic}/{name}") public PageEvent publish(@PathVariable String topic, @PathVariable String name) { PageEvent pageEvent = new PageEvent(name, Math.random() < 0.5 ? "user1" : "user2", new Date(), new Random().nextInt(9000)); streamBridge.send(topic, pageEvent); return pageEvent; } }
原application.properties配置
spring.application.name=spring-cloud-streams-kafka server.port=8080 spring.kafka.bootstrap-servers=localhost:8082 spring.cloud.function.definition=PageEventConsumer
错误日志
2024-10-07T16:37:55.440+01:00 INFO 18108 --- [spring-cloud-streams-kafka] [| adminclient-1] org.apache.kafka.clients.NetworkClient : [AdminClient clientId=adminclient-1] Node -1 disconnected.
pom.xml依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-streams</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-kafka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-kafka-streams</artifactId> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-test-binder</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka-test</artifactId> <scope>test</scope> </dependency> </dependencies>
补充环境信息
- 使用Confluent CLI启动Kafka:
confluent local kafka start - Confluent CLI端口信息:
| Kafka REST Port | 8082 | | Plaintext Ports | 40305 |
内容的提问来源于stack exchange,提问作者Haitam-Elgharras
相关产品推荐
相关产品推荐

