TopicsNotExistError: Темы xxx не существуют в kafka-узле? - PullRequest
0 голосов
/ 09 сентября 2018

Я использую kafka для сборки двух потребительских клиентов, как показано в коде ниже, но он дал мне ошибку, сказав

TopicsNotExistError: The topic(s) DEVICE_BINDED do not exist
    at new TopicsNotExistError (/Users/xisizhe/Documents/projects/mean-master/node_modules/_kafka-node@3.0.0@kafka-node/lib/errors/TopicsNotExistError.js:11:9)
    at /Users/xisizhe/Documents/projects/mean-master/node_modules/_kafka-node@3.0.0@kafka-node/lib/client.js:464:43

Как я могу это решить?

var kafka = require('kafka-node');

function ConnectionProvider() {
    this.getConsumer = function (topic_name) {
          console.log('consumer consumer',topic_name);
          this.client = new kafka.Client("localhost:2181");
          this.kafkaConsumerConnection = new kafka.Consumer(this.client,[ { topic: topic_name, partition: 0 }]);
          this.kafkaConsumerConnection.on('ready', function () {
            console.log('consumer ready!')
          })
      return this.kafkaConsumerConnection;
    };

    //Code will be executed when we start Producer
    this.getProducer = function () {

        if (!this.kafkaProducerConnection) {
            this.client = new kafka.Client("localhost:2181");
            var HighLevelProducer = kafka.HighLevelProducer;
            //this.kafkaProducerConnection = new HighLevelProducer(this.client);
            this.kafkaProducerConnection = new kafka.Producer(this.client);
            var self = this;
            this.kafkaProducerConnection.on('ready', function () {
                logger.debug('producer ready');

                self.kafkaProducerConnection.on('error', function (err) {
                    console.error("Error " + err)
                })
            });

        }
        return this.kafkaProducerConnection;
    };
}


const device_add_consumer  = connection.getConsumer(config.kafka.topic.DEVICE_ADDED);

const device_binded_consumer  = connection.getConsumer(config.kafka.topic.DEVICE_BINDED);

1 Ответ

0 голосов
/ 10 сентября 2018

я должен явно создать тему для клиента

Да, вы должны. В противном случае вы получите значения по умолчанию, установленные брокером (которые, если вы используете только localhost, вероятно, не настроены)

Я предполагаю, что он может создать тему через этот код автоматически

Это не безопасное предположение. Свойства сервера Kafka определяют, будут ли темы создаваться автоматически, и это можно было бы отключить.

Вам нужно создать его вручную, либо через Node, либо с помощью kafka-topics --create инструмента CLI из вашей установки Kafka

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