访问k8 minikube集群外的kafka经纪人

时间:2018-02-12 23:37:44

标签: apache-kafka kubernetes

我在Mac上的minikube k8群集上的Pod上运行了一个landoop kafka图像。我有2个不同的服务来公开模式注册表的端口8081和代理的9092。我已经映射了端口8081 - > 30081和9092 - >在我的NodePort服务中30092,以便我可以从群集外部访问它。 但是当我尝试运行控制台消费者或我的消费者应用程序时,Kafka从不消费消息。 要验证代理9092端口是否可在k8集群外部访问:

nc <exposed-ip> 30092, it says the port is open.

验证Schema注册表8081是否可访问:

curl -X GET http://192.168.99.100:30081/subjects

它返回可用的模式。

我有几个问题。 1)我们不能以k8集群之外的上述方式从k8集群中访问Kafka吗?如果是这样,我在某种程度上做错了吗? 2)如果端口是开放的,那是不是意味着经纪人可用?

感谢任何帮助。谢谢

2 个答案:

答案 0 :(得分:6)

如果您无法直接从外部路由到容器,则从容器网络外部访问Kafka群集相当复杂。

首次连接到Kafka群集时,您将连接到单个代理,并且代理会返回Kafka群集内所有代理和分区的列表。然后,Kafka客户端使用该列表与特定主题所在的代理进行交互。

问题是代理列表默认包含Kafka代理的内部IP。在你的情况下,容器网络ip。您可以通过在每个代理的配置中设置advertised.listeners来覆盖此值。

要从Kubernetes外部提供Kafka群集,您需要为每个代理配置nodeport服务,并将每个代理的advertised.listeners设置设置为相应nodeport服务的外部ip。但请注意,当您尝试在Kubernetes集群中使用Kafka时,这会增加额外的延迟和故障点。

答案 1 :(得分:0)

您需要为Kafka设置广告的侦听器。对于landoop docker图像,可以通过环境标志设置

-e ADV_HOST=192.168.99.100