首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法查询Kubernetes部署中的Kafka

问无法查询Kubernetes部署中的Kafka
EN

Stack Overflow用户
提问于 2018-04-29 23:58:42
回答 2查看 1.3K关注 0票数 1

在一个Ubuntu 14.04盒上

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

我使用Kubernetes版本v1.10.2 (我还在yml文件中使用apiVersion: app/v1。)

基本上,我已经为kafka设置了一个kubernetes服务,并使用图像wurstmeister/kafka.进行了kafka部署。动物园管理员工作正常。动物园管理员和卡夫卡的服务都结束了。Kafka部署是按照博客配置的:KAFKA_ADVERTISED_HOST_NAME = kafa服务集群IP,对我来说是10.106.84.132。

部署配置:

代码语言:javascript
复制
....
 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
        - name: KAFKA_BROKER_ID
          value: "1"
        - name: KAFKA_CREATE_TOPICS
          value: topic1:3:3

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

代码语言:javascript
复制
root@edmitchell-virtual-machine:~# kafkacat -b 10.106.84.132:9092 -t topic1

% Auto-selecting Consumer mode (use -P or -C to override)
% ERROR: Topic topic1 error: Broker: Leader not available

总的来说我能做的就是

我删除并重新创建一个kafka部署

  • 名称: KAFKA_ADVERTISED_HOST_NAME值: localhost

然后,我可以订阅和发布,但只有在卡夫卡容器内,它不工作从外部。如果我将值更改为localhost以外的任何内容,则没有任何操作。

知道吗?看起来卡夫卡和库伯奈特在一起是不好的吗?也许我不应该部署卡夫卡不使用库伯内特斯。

非常感谢艾德

谢谢,我现在对nodeport功能有了更好的理解。

我仍然有同样的问题:

代码语言:javascript
复制
root@fnature-virtual-machine:~/Zookeeper# kafkacat -b 192.168.198.160:32748 -t topic1 % Auto-selecting Consumer mode (use -P or -C to override) % ERROR: Topic topic1 error: Broker: Leader not available

正如您所说,我创建了nodeport服务。

代码语言:javascript
复制
kafka-nodeport NodePort 10.111.234.104 9092:32748/TCP 27m

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

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

代码语言:javascript
复制
 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容器中运行以下代码,也会得到类似的错误。

“没有领袖”。卡夫卡-控制台-使用者.9092引导-服务器本地主机:9092-主题topic1 -从一开始

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

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

我似乎找不到卡夫卡的原木

EN

回答 2

Stack Overflow用户

发布于 2018-04-30 01:41:11

卡夫卡经纪人通过KAFKA_ADVERTISED_HOST_NAME向动物园管理员注册了一个地址。但是,该地址是kubernetes集群ip (10.106.84.132),只能在Kubernetes集群中访问。因此,集群外的客户端无法使用此地址到达Kafka broker。

为了解决这个问题,您可以通过NodePort或LoadBalancer向公共ip公开kafka服务。例如,运行kubectl expose svc $YOUR_KAFKA_SERVICE_NAME --name=kafka-nodeport --type=NodePort,然后查找所公开的节点端口:kubectl get svc kafka-nodeport -o yaml | grep nodePort。在本例中,可以通过以下地址访问kafka:$KUBERNETES_NODE_IP$NODEPORT。

票数 1
EN

Stack Overflow用户

发布于 2019-10-31 07:30:26

在k8s中,部署kafka.yaml

代码语言:javascript
复制
env:
- name: KAFKA_BROKER_ID
  value: "1"
- name: KAFKA_CREATE_TOPICS
  value: "test:1:1"
- name: KAFKA_ZOOKEEPER_CONNECT
  value: "zookeeper:2181"
- name: KAFKA_ADVERTISED_LISTENERS
  value: "INSIDE://:9092,OUTSIDE://kafka-com:30322"
- name: KAFKA_LISTENERS
  value: "INSIDE://:9092,OUTSIDE://:30322"
- name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
  value: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT"
- name: KAFKA_INTER_BROKER_LISTENER_NAME
  value: "INSIDE" 

kafka服务、外部服务调用地址或traefik代理地址。

代码语言:javascript
复制
---
kind: Service
apiVersion: v1
metadata:
  name: kafka-com
  namespace: dev
  labels:
    k8s-app: kafka
spec:
  selector:
    k8s-app: kafka
  ports:
  - port: 9092
    name: innerport
    targetPort: 9092
    protocol: TCP
  - port: 30322
    name: outport 
    targetPort: 30322
    protocol: TCP
    nodePort: 30322
  type: NodePort

确保卡夫卡的外部端口和nodePort是一致的,其他服务电话卡夫卡-com:30322,我的博客写这个库伯奈特斯,希望能帮你!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50092446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档