You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minishift中Spring Boot无法向Strimzi Kafka集群发送消息

问题根因

该连接故障由三个配置错误共同导致:

  • 监听器暴露方式与访问地址不匹配
    你当前配置的两个Kafka监听器均为internal类型,该类型监听器只会在OpenShift集群内部生成ClusterIP类型Service,仅支持集群内通过内部DNS域名访问,不会自动创建OpenShift Route对外暴露。你使用的*.nip.io是OpenShift Router的默认泛域名,Router默认仅转发80/443端口的HTTP/HTTPS流量,9092端口的Kafka原生TCP流量没有对应的转发规则,连接必然失败。
  • 连接地址格式错误
    Kafka使用自定义TCP二进制协议通信,bootstrap.servers配置不需要加http://前缀,错误添加前缀会导致客户端地址解析异常。
  • 客户端与服务端版本不兼容
    你使用的Spring Kafka 3.1.1内置Kafka客户端版本为3.1.1,按照Kafka官方版本兼容规则,客户端与服务端大版本差不能超过1,3.x版本客户端对接2.7.0版本服务端跨2个大版本,存在API不兼容问题,即便网络连通也会出现请求异常。
排查解决步骤
  • 同项目内访问场景修正
    由于你的Spring Boot应用和Kafka集群部署在同一个OpenShift项目下,不需要走外部Route访问,直接将bootstrap.servers配置修改为my-cluster-kafka-bootstrap:9092,删除原有地址的http://前缀和nip.io后缀,同命名空间下短域名可直接解析到Kafka内部Service。
  • 集群外访问场景修正
    如果需要从OpenShift集群外部访问Kafka,需要在Kafka自定义资源中新增route类型的外部监听器,配置参考如下:
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: tls
        port: 9093
        type: internal
        tls: true
      - name: external
        port: 9094
        type: route
        tls: false
    
    等待Strimzi Operator完成调谐、自动创建好对应Route后,使用Route生成的访问地址作为bootstrap.servers值,同样不要添加http://前缀。
  • 版本兼容问题修正
    二选一调整即可:
    • 将Spring Kafka版本降级到2.8.x系列,该版本内置Kafka 2.8.x客户端,可兼容2.7.0版本服务端
    • 将Strimzi管理的Kafka服务端版本升级到3.1.x,与现有客户端版本匹配
  • 连通性校验
    配置修改完成后,先在Spring Boot应用所在Pod内执行端口连通性测试:
    nc -zv my-cluster-kafka-bootstrap 9092
    
    确认端口连通后再启动应用,观察是否还存在连接断开报错。

内容的提问来源于stack exchange,提问作者iperezmel78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:09:26