簡體   English   中英

Kafka NodePort服務在群集外無法訪問

[英]Kafka NodePort service is unreachable outside of cluster

我一直在嘗試使用Helm圖表部署Kafka。 所以我為Kafka pod定義了NodePort服務。 我檢查了控制台Kafka生產者和消費者使用相同的主機和端口 - 他們正常工作。 但是,當我創建Spark應用程序作為數據使用者而Kafka作為生產者時,他們無法連接到Kafka service0。 我使用minikube ip(而不是node ip)作為主機和服務NodePort端口。 雖然,在Spark日志中,我看到NodePort服務解析了端點,並且發現了代理作為pods和端口的代理:

INFO AbstractCoordinator: [Consumer clientId=consumer-1, groupId=avro_data] Discovered group coordinator 172.17.0.20:9092 (id: 2147483645 rack: null)
INFO ConsumerCoordinator: [Consumer clientId=consumer-1, groupId=avro_data] Revoking previously assigned partitions []
INFO AbstractCoordinator: [Consumer clientId=consumer-1, groupId=avro_data] (Re-)joining group
WARN NetworkClient: [Consumer clientId=consumer-1, groupId=avro_data] Connection to node 2147483645 (/172.17.0.20:9092) could not be established. Broker may not be available.
INFO AbstractCoordinator: [Consumer clientId=consumer-1, groupId=avro_data] Group coordinator 172.17.0.20:9092 (id: 2147483645 rack: null) is unavailable or invalid, will attempt rediscovery
WARN NetworkClient: [Consumer clientId=consumer-1, groupId=avro_data] Connection to node 2 (/172.17.0.20:9092) could not be established. Broker may not be available.
WARN NetworkClient: [Consumer clientId=consumer-1, groupId=avro_data] Connection to node 0 (/172.17.0.12:9092) could not be established. Broker may not be available.

如何改變這種行為?

NodePort服務定義如下所示:

kind: Service
apiVersion: v1
metadata:
  name: kafka-service
spec:
  selector:
    app: cp-kafka
    release: my-confluent-oss
  ports:
    - protocol: TCP
      targetPort: 9092
      port: 32400
      nodePort: 32400
  type: NodePort

Spark消費者配置:

def kafkaParams() = Map[String, Object](
  "bootstrap.servers" -> "192.168.99.100:32400",
  "schema.registry.url" -> "http://192.168.99.100:8081",
  "key.deserializer" -> classOf[StringDeserializer],
  "value.deserializer" -> classOf[KafkaAvroDeserializer],
  "group.id" -> "avro_data",
  "auto.offset.reset" -> "earliest",
  "enable.auto.commit" -> (false: java.lang.Boolean)
)

Kafka制作人配置:

  props.put("bootstrap.servers", "192.168.99.100:32400")
  props.put("client.id", "avro_data")
  props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
  props.put("value.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer")
  props.put("schema.registry.url", "http://192.168.99.100:32500")

Kafka的所有K8服務:

NAME                                     TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
kafka-service                            NodePort       10.99.113.234    <none>        32400:32400/TCP     6m34s
kubernetes                               ClusterIP      10.96.0.1        <none>        443/TCP             27d
my-confluent-oss-cp-kafka                ClusterIP      10.100.156.108   <none>        9092/TCP            102m
my-confluent-oss-cp-kafka-connect        ClusterIP      10.99.78.89      <none>        8083/TCP            102m
my-confluent-oss-cp-kafka-headless       ClusterIP      None             <none>        9092/TCP            102m
my-confluent-oss-cp-kafka-rest           ClusterIP      10.100.152.109   <none>        8082/TCP            102m
my-confluent-oss-cp-ksql-server          ClusterIP      10.96.249.202    <none>        8088/TCP            102m
my-confluent-oss-cp-schema-registry      ClusterIP      10.109.27.45     <none>        8081/TCP            102m
my-confluent-oss-cp-zookeeper            ClusterIP      10.102.182.90    <none>        2181/TCP            102m
my-confluent-oss-cp-zookeeper-headless   ClusterIP      None             <none>        2888/TCP,3888/TCP   102m
schema-registry-service                  NodePort       10.103.100.64    <none>        32500:32500/TCP     33m
zookeeper-np                             NodePort       10.98.180.130    <none>        32181:32181/TCP     53m

當我試圖從外面訪問在minikube上運行的kafka broker( cp-helm-chart )時,我遇到了類似的問題。

我在這里如何解決它。 在從本地存儲庫使用helm install安裝之前。

  1. 在此文件中編輯https://github.com/confluentinc/cp-helm-charts/blob/master/charts/cp-kafka/values.yaml
  2. 搜索nodeport:並將其enabled字段更改為true。
    nodeport:
    啟用:true
  3. 通過刪除#取消注釋這兩行:
    “advertised.listeners”:| -
    EXTERNAL:// $ {HOST_IP}:$((31090 + $ {KAFKA_BROKER_ID}))
  4. 用minikube ip替換$ {HOST_IP}(在cmd中輸入minikube ip以檢索你的k8s主機ip,例如:196.169.99.100)
  5. 用代理id替換$ {KAFKA_BROKER_ID}(如果只有一個代理正在運行,那么它默認為0)
  6. 最后它看起來像這樣:
    “advertised.listeners”:| -
    外部://196.169.99.100:31090

現在,您可以通過將bootstrap.servers指向196.169.99.100:31090來從外部訪問在k8s集群中運行的kafka代理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM