Kafka Producer, развернутый в Kubernetes, не может создать кластер Kafka, работающий на локальной машине - PullRequest
0 голосов
/ 30 августа 2018

У меня есть кластер Kafka, работающий на локальной машине с настройками по умолчанию вне моей настройки мини-куба. Я создал продюсера в одном из моих веб-сервисов и развернул его на мини-кубе.

Чтобы производитель подключился к Kafka, я использую 10.0.2.2 IP, который я также использую для подключения Cassandra и DGraph вне minikube, для этого он работает нормально.

Однако производитель Kafka не работает и даже не выдает ошибку «1006» или другие ошибки при отправке данных. Но я ничего не получаю на стороне потребителя.

Когда я запускаю этот веб-сервис за пределами Kubernetes, все работает.

Пожалуйста, если вы, ребята, знаете, что здесь может быть не так.

Ниже приведен файл Kubernetes yaml, который я использую.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: servicename
  labels:
    app: servicename
    metrics: kamon
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: servicename
        metrics: kamon
    spec:
      containers:
      - image: "image:app"
        imagePullPolicy: IfNotPresent
        name: servicename
        env:
        - name: CIRCUIT_BREAKER_MAX_FAILURES
          value: "10"
        - name: CIRCUIT_BREAKER_RESET_TIMEOUT
          value: 30s
        - name: CIRCUIT_BREAKER_CALL_TIMEOUT
          value: 30s
        - name: CONTACT_POINT_ONE
          value: "10.0.2.2"
        - name: DGRAPH_HOSTS
          value: "10.0.2.2"
        - name: DGRAPH_PORT
          value: "9080"
        - name: KAFKA_BOOTSTRAP_SERVERS
          value: "10.0.2.2:9092"
        - name: KAFKA_PRODUCER_NOTIFICATION_CLIENT_ID
          value: "notificationProducer"
        - name: KAFKA_NOTIFICATION_TOPIC
          value: "notification"
        - name: LAGOM_PERSISTENCE_READ_SIDE_OFFSET_TIMEOUT
          value: 5s
        - name: LAGOM_PERSISTENCE_READ_SIDE_FAILURE_EXPONENTIAL_BACKOFF_MIN
          value: 3s
        - name: LAGOM_PERSISTENCE_READ_SIDE_FAILURE_EXPONENTIAL_BACKOFF_MAX
          value: 30s
        - name: LAGOM_PERSISTENCE_READ_SIDE_FAILURE_EXPONENTIAL_BACKOFF_RANDOM_FACTOR
          value: "0.2"
        - name: LAGOM_PERSISTENCE_READ_SIDE_GLOBAL_PREPARE_TIMEOUT
          value: 30s
        - name: LAGOM_PERSISTENCE_READ_SIDE_RUN_ON_ROLE
          value: ""
        - name: LAGOM_PERSISTENCE_READ_SIDE_USE_DISPATCHER
          value: lagom.persistence.dispatcher
        - name: AKKA_TIMEOUT
          value: 30s
        - name: NUMBER_OF_DGRAPH_REPOSITORY_ACTORS
          value: "2"
        - name: DGRAPH_ACTOR_TIMEOUT_MILLIS
          value: "20000"
        - name: AKKA_ACTOR_PROVIDER
          value: "cluster"
        - name: AKKA_CLUSTER_SHUTDOWN_AFTER_UNSUCCESSFUL_JOIN_SEED_NODES
          value: 40s
        - name: AKKA_DISCOVERY_METHOD
          value: "kubernetes-api"
        - name: AKKA_IO_DNS_RESOLVER
          value: "async-dns"
        - name: AKKA_IO_DNS_ASYNC_DNS_PROVIDER_OBJECT
          value: "com.lightbend.rp.asyncdns.AsyncDnsProvider"
        - name: AKKA_IO_DNS_ASYNC_DNS_RESOLVE_SRV
          value: "true"
        - name: AKKA_IO_DNS_ASYNC_DNS_RESOLV_CONF
          value: "on"
        - name: AKKA_MANAGEMENT_HTTP_PORT
          value: "10002"
        - name: AKKA_MANAGEMENT_HTTP_BIND_HOSTNAME
          value: "0.0.0.0"
        - name: AKKA_MANAGEMENT_HTTP_BIND_PORT
          value: "10002"
        - name: AKKA_MANAGEMENT_CLUSTER_BOOTSTRAP_CONTACT_POINT_DISCOVERY_REQUIRED_CONTACT_POINT_NR
          value: "1"
        - name: AKKA_REMOTE_NETTY_TCP_PORT
          value: "10001"
        - name: AKKA_REMOTE_NETTY_TCP_BIND_HOSTNAME
          value: "0.0.0.0"
        - name: AKKA_REMOTE_NETTY_TCP_BIND_HOSTNAME
          value: "0.0.0.0"
        - name: AKKA_REMOTE_NETTY_TCP_BIND_PORT
          value: "10001"
        - name: LAGOM_CLUSTER_EXIT_JVM_WHEN_SYSTEM_TERMINATED
          value: "on"
        - name: PLAY_SERVER_HTTP_ADDRESS
          value: "0.0.0.0"
        - name: PLAY_SERVER_HTTP_PORT
          value: "9000"
        ports:
        - containerPort: 9000
        - containerPort: 9095
        - containerPort: 10001
        - containerPort: 9092
          name: "akka-remote"
        - containerPort: 10002
          name: "akka-mgmt-http"
---
apiVersion: v1
kind: Service
metadata:
  name: servicename
  labels:
    app: servicename
spec:
  ports:
    - name: "http"
      port: 9000
      nodePort: 31001
      targetPort: 9000
    - name: "akka-remote"
      port: 10001
      protocol: TCP
      targetPort: 10001
    - name: "akka-mgmt-http"
      port: 10002
      protocol: TCP
      targetPort: 10002
  selector:
    app: servicename
  type: NodePort

1 Ответ

0 голосов
/ 31 августа 2018

Я уже подключаюсь к Cassandra и Dgraph, работающим на той же машине, что и Kafka

Ну, эти службы не афишируют свой сетевой адрес через Zookeeper.

Мой кластер Кафки находится за пределами K8. Тем не менее, производитель находится в K8.

Чтобы службы вне k8s могли знать местонахождение Kafka, необходимо установить advertised.listeners для внешнего IP-адреса или DNS-адреса, который будут распознаваться всеми службами производителя / потребителя в среде k8s, и это адрес, по которому ваши службы будет подключаться к. Например PLAINTEXT://10.0.2.2:9092

Другими словами, если вы не настроили прослушиватели и слушали только на локальном хосте только потому, что порт Kafka открыт для внешнего доступа, это означает, что, хотя вы можете иметь возможность связаться с одним брокером, адрес, который вы получите назад как часть протокола не гарантируется совпадение с конфигурацией вашего клиента, и именно здесь рекламируемый адрес слушателя вступает в игру.

...