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

GKE上部署的Strimzi Kafka集群无法从外部机器访问问题咨询

问题根因

该元数据超时错误核心源于两个常见问题:

  1. 你仅放开了Kafka外部引导服务(bootstrap)的NodePort,未放开单节点Kafka broker自身对应的NodePort:Kafka客户端完成和bootstrap的连接后,会从bootstrap获取broker的对外访问地址,需要单独和broker的NodePort建立连接拉取Topic元数据,该端口被防火墙拦截会导致元数据拉取失败。
  2. 目标Topicmy-topic未提前创建,且集群未开启自动创建Topic配置。

排查步骤

  • 执行kubectl get svc -n kafka | grep NodePort,查看Kafka相关服务的端口映射:
    输出示例如下:
    my-cluster-kafka-external-bootstrap   NodePort    10.4.12.34   <none>        9094:31045/TCP   2d
    my-cluster-kafka-0                    NodePort    10.4.5.67    <none>        9094:31245/TCP   2d
    
    其中my-cluster-kafka-0服务9094端口对应的NodePort(示例中为31245)就是需要额外放开的端口。
  • 执行kubectl -n kafka exec -it my-cluster-kafka-0 -- bin/kafka-topics.sh --list --bootstrap-server localhost:9092,检查my-topic是否存在。

修复方案

  1. 放开broker对应的NodePort:
    执行GCP防火墙规则放开上一步查到的broker NodePort,替换下方命令中的<broker-node-port>为你实际查询到的端口:

    gcloud compute firewall-rules create allow-kafka-broker-nodeport --allow tcp:<broker-node-port>
    

    如果你后续扩容为多节点Kafka集群,需要把所有broker对应的NodePort都加入防火墙放行规则。

  2. 创建目标Topic(或开启自动创建):
    方式一:手动创建Topic,集群内执行如下命令:

    kubectl -n kafka run kafka-topics --image=quay.io/strimzi/kafka:0.26.0-kafka-3.0.0 --rm -it --command -- bin/kafka-topics.sh --create --topic my-topic --bootstrap-server my-cluster-kafka-bootstrap:9092 --partitions 1 --replication-factor 1
    

    方式二:开启自动创建Topic,修改你的Kafka自定义资源YAML,在spec.kafka.config下添加配置:

    auto.create.topics.enable: true
    

    重新apply该YAML,等待Strimzi完成集群滚动更新后即可自动创建不存在的Topic。

  3. 验证访问:
    配置完成后重新使用外部控制台生产者测试,即可正常发送消息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:36:08