我正在尝试从本地计算机上的 kubernetes 外部访问 kafka。我正在使用 spring 应用程序来生成有关某个主题的事件。这是我的 kafka 部署文件:
kind: Deployment
metadata:
name: kafka-broker0
labels:
app: kafka
spec:
replicas: 2
selector:
matchLabels:
app: kafka
id: "0"
template:
metadata:
labels:
app: kafka
id: "0"
spec:
containers:
- name: kafka
image: wurstmeister/kafka
ports:
- containerPort: 9092
env:
- name: KAFKA_ADVERTISED_PORT
value: "30718"
- name: KAFKA_ADVERTISED_HOST_NAME
value: 192.168.1.240
- name: KAFKA_ZOOKEEPER_CONNECT
value: zoo1:2181
- name: KAFKA_BROKER_ID
value: "0"
- name: KAFKA_CREATE_TOPICS
value: LaunchScraper:1:1
和服务文件 ID:
kind: Service
metadata:
name: kafka-services
labels:
name: kafka
spec:
selector:
app: kafka
id: "0"
ports:
- protocol: TCP
name: kafka-port
port: 9092
type: NodePort
我已经在 kubernetes 上创建了一个 Zookeeper Pod。我的 Spring Boot 应用程序显示此错误:
2020-09-25 23:56:29.123 WARN 44324 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient : [Producer clientId=producer-1] Connection to node -1 (/192.168.1.240:9092) could not be established. Broker may not be available.
请您参考如下方法:
您似乎没有修复服务中的nodePort。当您达到在 KAFKA_ADVERTISED_PORT 中输入的值时。还将 KAFKA_ADVERTISED_HOST 设置为您的 K8s 节点主机名/DNS。
在您的服务规范中,在 ports 条目下添加 nodePort: 30718。然后在您的客户端中,尝试使用节点的地址或主机名连接 30718 端口
此外,如果您希望在生产环境中部署 Kafka,我建议使用 Strimzi https://Strimzi.io 等运算符。




