在一个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。
部署配置:
....
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容器外部发布,但失败如下:
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部署
然后,我可以订阅和发布,但只有在卡夫卡容器内,它不工作从外部。如果我将值更改为localhost以外的任何内容,则没有任何操作。
知道吗?看起来卡夫卡和库伯奈特在一起是不好的吗?也许我不应该部署卡夫卡不使用库伯内特斯。
非常感谢艾德
谢谢,我现在对nodeport功能有了更好的理解。
我仍然有同样的问题:
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服务。
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容器中运行以下代码,也会得到类似的错误。
“没有领袖”。卡夫卡-控制台-使用者.9092引导-服务器本地主机:9092-主题topic1 -从一开始
如果我用KAFKA_ADVERTISED_HOST_NAME: localhost创建kafka部署,那么上面的命令在kafka容器中工作。
192.168.198.160是我的Ubuntu中默认接口ens33的ip。
我似乎找不到卡夫卡的原木
发布于 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。
发布于 2019-10-31 07:30:26
在k8s中,部署kafka.yaml
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代理地址。
---
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,我的博客写这个库伯奈特斯,希望能帮你!
https://stackoverflow.com/questions/50092446
复制相似问题