我使用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
看上去是broker对外广告自己的地址列表的时候,把
kafka-0.kafka-headless.kafka.svc.cluster.local
作为broker的地址了。所以应该有两个方法可以避免这个问题
advertised.listeners
为xxx.xxx.xxx.xxx:30604
。advertised.listeners
这个配置可以添加多个地址,可以同时把内网域名和ip端口都加上去,这样集群外和集群内就都可以连接了。