Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

819
Views
Kafka en Kubernetes Cluster: cómo publicar/consumir mensajes desde fuera de Kubernetes Cluster
  1. Tengo Kafka implementado y ejecutándose en el clúster de Kubernetes. Estoy usando esta imagen de docker hub: https://hub.docker.com/r/cloudtrackinc/kubernetes-kafka/
  2. Tengo 3 kube-nodes en mi clúster de kubernetes. Tengo 3 aplicaciones Kafka y 3 zookeeper en ejecución y tengo los servicios zoo1,zoo2,zoo3 y kafka-1, kafka-2 y kafka-3 en ejecución correspondientes a ellas. Puedo publicar/consumir desde dentro del clúster de kubernetes, pero no puedo publicar/consumir desde fuera del clúster de kubernetes, es decir, desde una máquina externa que no forma parte del clúster de kubernetes.
  3. Puedo acceder a los kube-nodes desde una máquina externa; básicamente, puedo hacer ping con el nombre/ip.
  4. No estoy usando ningún balanceador de carga externo, pero tengo un DNS que puede resolver tanto mi máquina externa como los nodos kube.
  5. El uso de NodePort o ExternalIP para exponer el servicio de Kafka no funciona en este caso.
  6. Establecer KAFKA_ADVERTISED_HOST_NAME o KAFKA_ADVERTISED_LISTENERS en Kafka RC YML que finalmente establece las propiedades ADVERTISED_HOST_NAME / ADVERTISED_LISTENERS en server.properties tampoco ayuda a acceder a kafka desde fuera del clúster de kubernetes.

Sugiera cómo puedo publicar/consumir desde fuera del clúster de kubernetes. ¡Muchas gracias!

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Tuve el mismo problema al acceder a kafka desde fuera del clúster k8s en AWS. Me las arreglé para resolver este problema usando la función de oyentes kafka que desde la versión 0.10.2 admite múltiples interfaces.

así es como configuré el contenedor 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"

Aparte de eso configuré dos Servicios. Uno para comunicación interna (sin cabeza) y otro para comunicación externa (LoadBalancer).

Esperemos que esto ahorre tiempo a la gente.

over 4 years ago · Santiago Trujillo Report

0

Pude resolver mi problema haciendo los siguientes cambios:

  1. Uso de NodeSelector en YML para hacer que kafka pod se ejecute en un nodo particular de kube cluster.

  2. Establezca KAFKA_ADVERTISED_HOST_NAME en Kube hostName donde este Kafka POD se configuró para ejecutarse (como se configuró en el paso 1)

  3. Exponga el servicio Kafka usando NodePort y configure el puerto POD igual que el NodePort expuesto como se muestra a continuación:

     spec: ports: - name: broker-2 port: **30031** targetPort: 9092 nodePort: **30031** protocol: TCP selector: app: kafka-2 broker_id: "2" type: NodePort

Ahora, puede acceder a los agentes de Kafka desde fuera del clúster de kube mediante host:exposedPort

over 4 years ago · Santiago Trujillo Report

0

Resolví este problema usando la imagen proxy Kafka REST de Confluent.

https://hub.docker.com/r/confluentinc/cp-kafka-rest/

La documentación del proxy REST está aquí:

http://docs.confluent.io/3.1.2/kafka-rest/docs/index.html

Paso A: cree una imagen de la ventana acoplable del agente de Kafka con la última versión de Kafka

Usé una imagen de corredor de Kafka personalizada basada en la misma imagen que usó. Básicamente, solo necesita actualizar la imagen de cloudtrackinc para usar la versión 0.10.1.0 de Kafka o, de lo contrario, no funcionará. Simplemente actualice Dockerfile desde la imagen de cloudertrackinc para usar la última imagen de kafka de wurstmeister y reconstruya la imagen de docker.

 - FROM wurstmeister/kafka:0.10.1.0

Establecí ADVERTISED_HOST_NAME para cada corredor de Kafka en la IP de POD para que cada corredor obtenga una URL única.

 - name: ADVERTISED_HOST_NAME valueFrom: fieldRef: fieldPath: status.podIP

Paso B: configure el proxy cp-kafka-rest para usar su clúster de agentes de Kafka

Kafka Rest Proxy debe ejecutarse dentro del mismo clúster que su clúster de agente de Kafka.

Debe proporcionar dos variables de entorno a la imagen cp-kafka-rest como mínimo para que se ejecute. KAFKA_REST_HOST_NAME y KAFKA_REST_ZOOKEEPER_CONNECT. Puede configurar KAFKA_REST_HOST_NAME para usar la IP de POD.

 - 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"

Paso C: exponer el proxy REST de Kafka como un servicio

spec: type: NodePort or LoadBalancer ports: - name: kafka-rest-port port: 8082 protocol: TCP

Puede usar NodePort o LoadBalancer para utilizar uno o varios pods de Kafka REST Proxy.

Ventajas y desventajas de usar el proxy REST de Kafka

Ventajas:

  1. Puede escalar fácilmente el clúster de agentes de Kafka
  2. No tiene que exponer a los corredores de Kakfa fuera del clúster.
  3. Puede usar el equilibrador de carga con el Proxy.
  4. Puede usar cualquier tipo de cliente para acceder al clúster de Kafka (es decir, curl). Peso muy ligero.

Contras:

  1. Otro componente/capa encima del grupo Kakfa.
  2. Los consumidores se crean dentro del pod de proxy. Su cliente REST deberá realizar un seguimiento de esto.
  3. El rendimiento no es ideal: REST en lugar del protocolo Kafka nativo. Aunque si implementa varios proxies, esto podría ayudar un poco. No usaría esta configuración para tráfico de alto volumen. Para el tráfico de mensajes de bajo volumen, esto podría estar bien.

Entonces, si puede vivir con los problemas anteriores, pruebe Kafka Rest Proxy.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!