kafka nodejs - 使用SASL身份验证创建生产者和使用者的问题

时间:2017-12-19 07:52:50

标签: node.js apache-kafka

我正在尝试使用nodejs创建使用SASL身份验证的Kafka生产者和使用者,但它似乎在我尝试过几乎所有这些的nodejs kafka包中都没有(node-rdkafka,kafka-node,no-卡夫卡....)

使用node-rdkafka尝试下面的选项,但是使用sasl发布msgs没有运气

var Kafka = require('node-rdkafka');
var producer = Kafka.Producer({
  'debug': 'all',
  'metadata.broker.list': 'localhost:9092',
  'security.protocol': 'sasl_plaintext',
  'sasl.username': 'root',
  'sasl.password': 'admin!',
  'sasl.mechanisms': 'PLAIN',
});

// producer.connect();
producer.connect(null, (err, metadata) => {
   console.log(metadata);
   console.error(err);
   console.log('Connected')
});

producer.on('ready', function () {
  try {
    producer.produce('topic1', null, new Buffer('Awesome'), null, Date.now())
  } catch (err) {
    console.log('A error occured')
  }
});

// Any errors we encounter, including connection errors
producer.on('event.error', function(err) {
  console.log('Error from producer');
  console.log(err);
})

producer
  .on('event.log', function(event) {
      console.log(event)
      const loggedEvent = {
        severity: event.severity,
        fac: event.fac
      };

      if (event.severity >= 7) {
        console.log(loggedEvent, event.message);
      } else if (event.severity === 6 || event.severity === 5) {
        console.log(loggedEvent, event.message);
      } else if (event.severity === 4) {
        console.log(loggedEvent, event.message);
      } else if (event.severity > 0) {
        console.log(loggedEvent, event.message);
      } else {
        console.log(loggedEvent, event.message);
      }
})

除此之外,由于node-rdkafka的C ++包装器而面临node-gyp和docker问题

https://github.com/nodejs/node/issues/17732
https://github.com/GaiamTV/kafka-node-topic-consumer/issues/3
https://github.com/Blizzard/node-rdkafka/issues/323

甚至创建了包含生产者和消费者独立java类的jar文件,并尝试使用nodejs子进程运行这些java类,这些进程没有抛出任何错误,同时没有输出

var cmd    = require('child_process').spawn('java', ['-cp', 'NodeKafka-0.0.1-SNAPSHOT.jar', 'node/kafka/NodeKafka/nodeKafkaConsumer.class']);

//console.log(spawn);
setInterval(function() {
cmd.stdout.on('data', function (data) {
  console.log('stdout: ' + data); // This will print string returned by Main class.
});

},3000);

与Java和python

相比,Kafka nodejs的许多依赖性和错误

请帮助使用node-rdkafka或支持SASL身份验证的任何其他pacakge(不使用SSL)来创建kafka生产者和消费者

2 个答案:

答案 0 :(得分:0)

如果您想将Nodejs与Kafka和SASL一起使用,那么您没有太多选择。据我所知,只有node-rdkafka正式支持它。也就是说,我已经使用它超过一年了(使用SASL),这是一个非常好的客户。

我不知道您的配置或用例,但请注意,当通过纯文本连接使用SASL Plain时,凭据将以明文形式通过网络发送。

安装node-rdkafka时,您需要确保它已成功构建并启用了所有必需的功能(SASL)。根据您的操作系统,您需要安装的确切依赖项会略有不同。

查看您在node-rdkafka问题中粘贴的日志,您缺少所有依赖项,包括C编译器!所需的库列在https://github.com/edenhill/librdkafka#requirements

关于SASL依赖关系,在npm输出中,您希望看到:

checking for libsasl2 (by pkg-config)... ok
checking for libsasl2 (by compile)... ok (cached)
...
ENABLE_SASL              y
...
LIBS                     ... -lsasl2 ...

最后你的Nodejs客户端逻辑看起来很好,所以一旦你的依赖项被排序,它应该可以工作。

答案 1 :(得分:0)

对于带有节点的kafka来说,它们是好软件包https://kafka.js.org/

他们有SASL https://kafka.js.org/docs/configuration#a-name-sasl-a-sasl

相关问题