首页 文章

无法在Kubernetes部署中查询Kafka

提问于
浏览
1

在单个Ubuntu 14.04盒子上

我遵循了与http://dojoblog.dellemc.com/dojo/deploy-kafka-cluster-kubernetes/相同的配置

我使用Kubernetes版本v1.10.2(我也在yml文件中使用apiVersion:apps / v1 . )

基本上我已经为kafka设置了kubernetes服务,并使用image wurstmeister / kafka进行了kafka部署 . Zookeeper工作正常 . Zookeeper和Kafka服务正在增加 . 根据博客配置Kafka部署:KAFKA_ADVERTISED_HOST_NAME =适用于我的kafa服务群集IP 10.106.84.132

deployment config:.... containers: - name:kafka image:wurstmeister / kafka ports: - containerPort:9092 env: - name:KAFKA_ADVERTISED_PORT value:“9092” - name:KAFKA_ADVERTISED_HOST_NAME value:10.106.84.132 - name:KAFKA_ZOOKEEPER_CONNECT value: zoo1:2181 - 名称:KAFKA_BROKER_ID值:“1” - 名称:KAFKA_CREATE_TOPICS值:topic1:3:3

然后我测试kafka订阅并从我的主机上的kafka容器外部发布,但是失败如下:

root @ edmitchell-virtual-machine:〜#kafkacat -b 10.106.84.132:9092 -t topic1%自动选择消费者模式(使用-P或-C覆盖)%ERROR:主题topic1错误:代理:领导不可用

我能做的最好的就是

我删除并重新创建了一个kafka部署,其名称为:KAFKA_ADVERTISED_HOST_NAME:localhost

然后,我可以订阅和发布,但只能从kafka容器中,它不能从外部工作 . 如果我将值更改为localhost之外的任何其他内容,则无效 .

任何的想法 ?看起来好像Kafka不适合与Kubernetes一起使用?也许我不应该使用kubernetes来部署Kafka ..

非常感谢ed


谢谢,我现在更了解nodeport功能 .

我仍然有同样的问题:root @fnature-virtual-machine:〜/ Zookeeper #kafkacat -b 192.168.198.160:32748 -t topic1%自动选择消费者模式(使用-P或-C覆盖)%ERROR:主题topic1错误:经纪人:领导人不可用

我按照你说的创建了nodeport服务 .

kafka-nodeport NodePort 10.111.234.104 9092:32748 / TCP 27m

kafka-service LoadBalancer 10.106.84.132 9092:30351 / TCP 1d

我还使用以下env删除/创建kafka部署:KAFKA_ADVERTISED_PORT:32748

KAFKA_ADVERTISED_HOST_NAME:192.168.198.160

KAFKA_ZOOKEEPER_CONNECT:zoo1:2181

KAFKA_BROKER_ID:1

KAFKA_CREATE_TOPICS:topic1:3:3

另外如果我从kafka容器中运行以下命令,我会得到类似的错误“Leader not available” . kafka-console-consumer.sh --bootstrap-server localhost:9092 - topic topic1 --from-beginning

如果我使用KAFKA_ADVERTISED_HOST_NAME:localhost创建kafka部署,那么上面的命令在kafka容器内部工作

和192.168.198.160是我的Ubuntu VM中默认接口ens33的ip

我似乎找不到任何kafka的日志

1 回答

  • 1

    Kafka经纪人通过 KAFKA_ADVERTISED_HOST_NAME 向zookeeper注册一个地址 . 但是,此地址是kubernetes cluster ip(10.106.84.132),只能在Kubernetes集群中访问 . 因此,群集外的客户端无法使用此地址访问Kafka经纪人 .

    要解决此问题,您可以通过 NodePortLoadBalancer 将kafka服务公开给公共IP . 例如,运行 kubectl expose svc $YOUR_KAFKA_SERVICE_NAME --name=kafka-nodeport --type=NodePort ,然后查找公开的nodeport: kubectl get svc kafka-nodeport -o yaml | grep nodePort . 在此示例中,可通过以下地址访问kafka代理: $KUBERNETES_NODE_IP$NODEPORT .

相关问题