k8s安装好了kafka,springcloud启动时报连接出现问题?

我使用helm安装kafka安装好了,如下:

NAME               READY   STATUS    RESTARTS   AGE
pod/kafka-0        1/1     Running   0          20h
pod/kafka-client   1/1     Running   0          2m36s

NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/kafka            NodePort    192.168.128.23   <none>        9092:30604/TCP               20h
service/kafka-headless   ClusterIP   None             <none>        9092/TCP,9094/TCP,9093/TCP   20h

NAME                     READY   AGE
statefulset.apps/kafka   1/1     20h

查询出来的kafka真实ip:xxx.xxx.xxx.xxx,Port:30604
然后配置springcloud stream

spring:
  cloud:
    stream:
      bindings:
        test-out-0: # 对用在ProducersConfig中的生产函数logP
          destination: test  # logP将数据发送的topic
        test-in-0: # 对用在ConsumersConfig中的生产函数logC
          destination: test
          group: log_group
      kafka:
        binder:
          # 自动创建topics
          auto-create-topics: true
          # 测试环境Broker地址
          brokers: xxx.xxx.xxx.xxx:30604
      function:
        definition: test # 指定对应的函数为Spring Cloud Stream中的生产消费通道

然后启动报错:

2023-05-29 14:24:38.109 WARN 8573 --- [| adminclient-1] org.apache.kafka.clients.NetworkClient : [AdminClient clientId=adminclient-1] Error connecting to node kafka-0.kafka-headless.kafka.svc.cluster.local:9092 (id: 0 rack: null)

已解决:配置bitnami/kafka的values.yaml文件,重新使用helm安装一下就OK了

global:
  storageClass: alibabacloud-cnfs-nas
persistence:
  # NAS
  storageClass: alibabacloud-cnfs-nas
  size: 8Gi
# 设置外部ip:port访问配置
externalAccess:
  enabled: true
  service:
    type: NodePort
    domain: xxx.xxx.xxx.xxx
    #注意这里,设置了domain之后就不需要设置externalIPs
#    externalIPs:
#      - xxx.xxx.xxx.xxx
    nodePorts:
      - 30566
rbac:
  create: true
阅读 2.3k
1 个回答

看上去是broker对外广告自己的地址列表的时候,把kafka-0.kafka-headless.kafka.svc.cluster.local作为broker的地址了。

所以应该有两个方法可以避免这个问题

  1. 程序也要放在k8s集群里面,在集群里面就可以通过域名连接到broker了。
  2. 修改kafka的配置,指定advertised.listenersxxx.xxx.xxx.xxx:30604

advertised.listeners 这个配置可以添加多个地址,可以同时把内网域名和ip端口都加上去,这样集群外和集群内就都可以连接了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题