KAFKA_ADVERTISED_HOST_NAME或KAFKA_ADVERTISED_LISTENERS,最终在server.properties中设置ADVERTISED_HOST_NAME/ADVERTISED_LISTENERS属性,这都无助于从kubernetes集群之外访问kafka。请建议我如何从kubernetes集群之外发布/消费。非常感谢!
发布于 2017-05-15 15:33:30
在AWS上从k8s集群外部访问kafka时,我也遇到了同样的问题。我设法通过使用kafka listeners特性来解决这个问题,该特性来自0.10.2版本,支持多个接口。
以下是我如何配置kafka容器。
ports:
- containerPort: 9092
- containerPort: 9093
env:
- name: KAFKA_ZOOKEEPER_CONNECT
value: "zookeeper:2181"
- name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
value: "INTERNAL_PLAINTEXT:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT"
- name: KAFKA_ADVERTISED_LISTENERS
value: "INTERNAL_PLAINTEXT://kafka-internal-service:9092,EXTERNAL_PLAINTEXT://123.us-east-2.elb.amazonaws.com:9093"
- name: KAFKA_LISTENERS
value: "INTERNAL_PLAINTEXT://0.0.0.0:9092,EXTERNAL_PLAINTEXT://0.0.0.0:9093"
- name: KAFKA_INTER_BROKER_LISTENER_NAME
value: "INTERNAL_PLAINTEXT"除此之外,我还配置了两个服务。一个用于内部(无头)和一个用于外部(LoadBalancer)通信。
希望这能节省人们的时间。
发布于 2017-03-09 05:00:56
我可以通过做以下的改变来解决我的问题-
KAFKA_ADVERTISED_HOST_NAME设置为Kube hostName,其中已将此Kafka配置为在其上运行(如步骤1所配置)现在,您可以使用主机:暴露端口从kube集群外部访问Kafka代理程序。
发布于 2017-01-27 07:16:21
我使用Confluent的Kafka REST代理映像解决了这个问题。
https://hub.docker.com/r/confluentinc/cp-kafka-rest/
REST代理的文档如下:
http://docs.confluent.io/3.1.2/kafka-rest/docs/index.html
步骤A:使用最新的卡夫卡版本构建卡夫卡经纪人码头映像
我使用了一个定制的Kafka broker映像,它是基于您使用的相同的图像构建的。基本上,您只需更新cloudtrackinc的映像,就可以使用Kafka版本0.10.1.0,否则它将无法工作。只需从cloudertrackinc的映像中更新Dockerfile,就可以使用最新的wurstmeister图像并重新构建码头映像。
- FROM wurstmeister/kafka:0.10.1.0我将每个Kafka的ADVERTISED_HOST_NAME设置为POD的IP,这样每个代理都会得到一个唯一的URL。
- name: ADVERTISED_HOST_NAME
valueFrom:
fieldRef:
fieldPath: status.podIP步骤B:设置cluster代理来使用您的Kafka代理集群
Kafka Rest代理必须在与您的Kafka broker集群相同的集群中运行。
您需要至少为映像提供两个环境变量才能运行。KAFKA_REST_HOST_NAME和KAFKA_REST_ZOOKEEPER_CONNECT.您可以将KAFKA_REST_HOST_NAME设置为使用POD的IP。
- name: KAFKA_REST_HOST_NAME
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: KAFKA_REST_ZOOKEEPER_CONNECT
value: "zookeeper-svc-1:2181,zookeeper-svc-2:2181,zookeeper-svc-3:2181"步骤C:将卡夫卡REST代理公开为服务
spec: type: NodePort or LoadBalancer ports: - name: kafka-rest-port port: 8082 protocol: TCP
您可以使用NodePort或LoadBalancer来使用单个或多个Kafka代理荚。
使用卡夫卡REST代理的建议与建议
优点:
缺点:
因此,如果你能接受上述问题,那么就给卡夫卡Rest代理一个尝试。
https://stackoverflow.com/questions/41868161
复制相似问题