使用Java开发Kafka Stream示例启动时遇UnsupportedVersionException错误求助
嗨,我看到你在用Java开发Kafka Stream示例的时候启动遇到问题了,先别慌,咱们一步步来分析解决~
你提供的日志片段如下:
17:34:38.930 [kafka-admin-client-thread | my-ktable-demo-881a7b7e-9830-4e3c-b7b8-eeaf70a26bbf-admin] DEBUG org.apache.kafka.clients.NetworkClient -- [AdminClient clientId=my-ktable-demo-881a7b7e-9830-4e3c-b7b8-eeaf70a26bbf-admin] Received METADATA response from node -1 for request with header RequestHeader(apiKey=METADATA, apiVersion=12, clientId=my-ktable-demo-881a7b7e-9830-4e3c-b7b8-eeaf70a26bbf-admin, correlationId=1, headerVersion=2): MetadataResponseData(throttleTimeMs=0, brokers=[MetadataResponseBroker(nodeId=1, host='localhost', port=9092, rack=null)], clusterId='MkU3OEVBNTcwNTJENDM2Qg', controllerId=1, topics=[], clusterAuthorizedOperations=-2147483648) 17:34:38.924 [kafka-producer-network-thread | my-ktable-demo-881a7b7e-9830-4e3c-b7b8-eeaf70a26bbf-StreamThread-1-producer] DEBUG org.apache.kafka.clients.NetworkClient -- [Producer clientId=my-ktable-demo-881a7b7e-9830-4e3c-b7b8-e...
从日志里的apiVersion=12能看出,你的Kafka客户端(包括Streams依赖的AdminClient、Producer)在尝试使用版本12的Metadata API,但你的Kafka Broker大概率不支持这么高的版本,这几乎肯定是客户端与Broker版本不兼容导致的UnsupportedVersionException(虽然你没贴全完整错误栈,但结合这个日志片段基本能锁定原因)。
给你几个具体的解决方向:
先确认Broker版本:在Broker所在机器上运行命令查看版本:
- Linux/macOS:
kafka-topics.sh --version - Windows:
kafka-topics.bat --version
记下来这个版本号,比如2.8.1或者3.3.2。
- Linux/macOS:
对齐客户端依赖版本:调整你项目中Kafka相关依赖的版本,确保和Broker版本完全一致或者在兼容范围内。比如如果Broker是2.8.x,那你的
kafka-streams、kafka-clients依赖版本也得用2.8.x,别用3.x的高版本(高版本客户端对低版本Broker的兼容性很差)。
如果是用Maven,你可以直接在<dependencies>里指定统一的版本:<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-streams</artifactId> <version>2.8.1</version> <!-- 和Broker版本一致 --> </dependency>检查API版本配置:如果你的代码里手动指定了客户端的API版本(比如通过
client.properties或者代码里的配置),把它调整到Broker支持的范围内。比如Broker支持的最高Metadata API版本如果是10,就别强行设成12。排查依赖冲突:如果是用Spring Boot这类框架整合Kafka Streams,要注意框架自带的Kafka依赖版本可能和你想要的不一致。可以运行
mvn dependency:tree(Maven)或者./gradlew dependencies(Gradle)查看依赖树,排除掉冲突的版本,强制使用和Broker匹配的版本。
另外,建议你找一下完整的错误堆栈信息,里面会明确告诉你“哪个API版本不被支持”以及“Broker支持的最高版本是多少”,这样能更精准地调整配置。
备注:内容来源于stack exchange,提问作者PAA

