Брокер недоступен (loadMetadataForTopics) - kafka-node - PullRequest
0 голосов
/ 20 июня 2020

Мой docker -составить файл

version: '3'
services:
  zookeeper:
    container_name: zookeeper
    image: confluentinc/cp-zookeeper
    ports:
      - "32181:32181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 32181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_SYNC_LIMIT: 2
    
  kafka:
    container_name: kafka
    image: confluentinc/cp-kafka
    ports:
      - "9094:9094"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: localhost:32181
      KAFKA_LISTENERS: INTERNAL://localhost:9092,OUTSIDE://localhost:9094
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://localhost:9092,OUTSIDE://localhost:9094
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      ES_JAVA_OPTS: "-Xms512m -Xmx3000m"

введите описание изображения здесь

и код производителя:

var kafka = require('kafka-node'),
    Producer = kafka.Producer,
    KeyedMessage = kafka.KeyedMessage,
    client = new kafka.KafkaClient({kafkaHost:"localhost:9094"}),

    producer = new Producer(client),
    km = new KeyedMessage('key', 'message'),
    payloads = [
        { topic: 'topic1', messages: 'hi', partition: 0 },
        { topic: 'topic1', messages: ['hello', 'world', km] }
    ];

client.createTopics(topicsToCreate, (error, result) => {
                
                echo ("------------------------KAFAK--------------------")
                console.log(error);
                console.log(result);            
            });

Ошибка получения ниже при создании топи c перед отправкой полезной нагрузки в темы

{ BrokerNotAvailableError: Broker not available (loadMetadataForTopics)
    at new BrokerNotAvailableError (C:\wamp64\www\ws-proxy\HOZ-KOG-WebSocket_NodeJS\node_modules\kafka-node\lib\errors\BrokerNotAvailableError.js:11:9)
    at KafkaClient.loadMetadataForTopics (C:\wamp64\www\ws-proxy\HOZ-KOG-WebSocket_NodeJS\node_modules\kafka-node\lib\kafkaClient.js:891:21)
    at KafkaClient.loadMetadata (C:\wamp64\www\ws-proxy\HOZ-KOG-WebSocket_NodeJS\node_modules\kafka-node\lib\kafkaClient.js:876:8)
    at KafkaClient.getController (C:\wamp64\www\ws-proxy\HOZ-KOG-WebSocket_NodeJS\node_modules\kafka-node\lib\kafkaClient.js:267:8)
    at KafkaClient.sendControllerRequest (C:\wamp64\www\ws-proxy\HOZ-KOG-WebSocket_NodeJS\node_modules\kafka-node\lib\kafkaClient.js:1219:8)
    at KafkaClient.createTopics (C:\wamp64\www\ws-proxy\HOZ-KOG-WebSocket_NodeJS\node_modules\kafka-node\lib\kafkaClient.js:935:8)
    at C:\wamp64\www\ws-proxy\HOZ-KOG-WebSocket_NodeJS\index_behind_kong.js:60:11
    at C:\wamp64\www\ws-proxy\HOZ-KOG-WebSocket_NodeJS\node_modules\kafka-node\lib\baseClient.js:370:18
    at KafkaClient.loadMetadataForTopics (C:\wamp64\www\ws-proxy\HOZ-KOG-WebSocket_NodeJS\node_modules\kafka-node\lib\kafkaClient.js:891:12)
    at RetryOperation._fn (C:\wamp64\www\ws-proxy\HOZ-KOG-WebSocket_NodeJS\node_modules\kafka-node\lib\baseClient.js:360:12) message: 'Broker not available (loadMetadataForTopics)' }
undefined

Я дал задержку в 5 секунд перед вызовом метода createtopi c, но безуспешно.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 21 июня 2020

Несколько вещей, которые я бы попробовал

  1. KAFKA_ZOOKEEPER_CONNECT: localhost: 32181 должен измениться на KAFKA_ZOOKEEPER_CONNECT: zookeeper: 32181

  2. Для 'ВНУТРЕННЯЯ 'Слушатели: изменить с ВНУТРЕННЕГО: // localhost: 9092 на ВНУТРЕННИЙ: // kafka: 9092

  3. У вас отсутствует зависимость для zookeeper в контейнере kafka

  4. Надеюсь, вы убедились, что никакие другие службы не работают на портах 9094 и 32181 на вашем локальном хосте.

  5. Попробуйте подключиться с помощью сценария kafka-themes «sh или bat» раньше идет с java application

  6. Я не думаю, что это будет проблемой, но все же вы можете попробовать добавить общий сетевой тег для обеих служб, а также в файл создания, например: networks : - kafka-network

Полезные ссылки: https://www.confluent.io/blog/kafka-listeners-explained/ (проверьте раздел КАК: «Подключение к Kafka на Docker»)

...