Невозможно подключиться к Кафке из внешнего приложения - PullRequest
1 голос
/ 18 февраля 2020

У меня есть две docker машины, и я хочу создать кластер kafka внутри docker роя. Мой docker-compose.yml выглядит следующим образом:

version: '3.2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka:latest
    ports:
      - "9092:9092"
      - "29092:29092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_LISTENERS: PLAINTEXT://:9092,PLAINTEXT_HOST://:29092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092

Я следовал за этим вопросом: Невозможно подключиться к Kafka, запустить в контейнере из приложения Spring Boot, запустить вне контейнера , и я пытаюсь получить доступ к kafka извне используя localhost: 29092 .

Я уже создал топи c mytesttopic внутри Кафки. Код ниже python:

from kafka import KafkaConsumer, SimpleProducer, TopicPartition, KafkaClient


def consume_from_topic():
    try:
        consumer = KafkaConsumer('mytesttopic',
                                 group_id= None,
                                 bootstrap_servers=['localhost:29092'],
                                 auto_offset_reset='earliest')

        for message in consumer:
            #consumer.commit()
            print ("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,
                                                  message.offset, message.key,
                                                  message.value))
    except Exception as e:
        print(e)
        pass



if __name__ == '__main__':
    consume_from_topic()

возвращает:

NoBrokersAvailable

Кто-нибудь знает, что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Ваши слушатели точно такие же.

Вам нужно установить PLAINTEXT_HOST://0.0.0.0:29092, чтобы привязать слушателя ко всем интерфейсам

0 голосов
/ 18 февраля 2020

Учитывая, что вы запускаете docker swarm на 2 других машинах, вы не сможете подключиться на localhost:29092 из-за того, что kafka будет выставлен на порт 29092 на ваших узлах docker swarm , Попробуйте подключиться к kafka, используя имя хоста одного из ваших узлов + порт 29092. Вы должны иметь возможность подключиться к kafka следующим образом.

Обратите внимание, что это будет работать, только если вы используете docker swarm with маршрутизация me sh, маршрутизация me sh гарантирует, что каждый узел принимает входящие запросы на опубликованный порт для любой службы, независимо от того, работает ли он на тех же хостах, и проверяет трафик c достигает фактического хоста, на котором работает ваш контейнер.

Если вы еще не настроили маршрутизацию me sh, попробуйте соединиться с реальным именем хоста, на котором работает контейнер kafka (не рекомендуется, но для целей тестирования это работает)

Надеюсь, это вам поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...