我的设置就像是,我在minikube集群中配置了一个生产者服务,它正在尝试将消息发布到主机上运行的kafka实例。
我编写了一个kafka服务和终结点yaml,如下所示:
kind: Service
apiVersion: v1
metadata:
name: kafka
spec:
ports:
- name: "broker"
protocol: "TCP"
port: 9092
targetPort: 9092
nodePort: 0
---
kind: Endpoints
apiVersion: v1
metadata:
name: kafka
namespace: default
subsets:
- addresses:
- ip: 10.0.2.2
ports:
- name: "broker"
port: 9092
端点中提到的minikube集群内部的主机IP地址是通过以下命令获取的:
minikube ssh "route -n | grep ^0.0.0.0 | awk '{ print \$2 }'"
我面临的问题是,当生产者第一次尝试发布消息时创建了该主题,但是没有消息写入该主题。
在查看Pod日志时,我发现生产者正在尝试连接到本地主机上的kafka实例(不是很确定)。
2020-05-17T19:09:43.021Z [warn] org.apache.kafka.clients.NetworkClient [] -
[Producer clientId=/system/sharding/kafkaProducer-greetings/singleton/singleton/producer]
Connection to node 0 (omkara/127.0.1.1:9092) could not be established. Broker may not be available.
以下我怀疑可能需要对server.properties
进行以下更改:
listeners=PLAINTEXT://localhost:9092
但是,这导致了日志中IP地址的更改:
2020-05-17T19:09:43.021Z [warn] org.apache.kafka.clients.NetworkClient [] -
[Producer clientId=/system/sharding/kafkaProducer-greetings/singleton/singleton/producer]
Connection to node 0 (omkara/127.0.0.1:9092) could not be established. Broker may not be available.
我不确定在此必须提及哪个IP地址?或什么是替代解决方案?并且甚至有可能从kubernetes集群内部连接到安装在kubernetes集群外部的kafka实例。
答案 0 :(得分:0)
由于生产者kafka客户端与代理位于同一网络上,因此我们需要像这样配置其他侦听器:
div
我们可以像这样验证主题中的消息:
listeners=INTERNAL://0.0.0.0:9093,EXTERNAL://0.0.0.0:9092
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
advertised.listeners=INTERNAL://localhost:9093,EXTERNAL://10.0.2.2:9092
inter.broker.listener.name=INTERNAL
您可以找到有关了解和设置Kafka监听器here的详细说明。