簡體   English   中英

kafka nodejs-使用SASL身份驗證創建生產者和使用者的問題

[英]kafka nodejs - Issue in creating producer and consumer with SASL authentication

我正在嘗試使用nodejs通過SASL身份驗證創建Kafka生產者和消費者,但似乎在所有我嘗試過的所有nodejs kafka軟件包(node-rdkafka,kafka-node,no-kafka)中都不可用。 ..)

在node-rdkafka下嘗試過以下選項,但是在使用sasl發布消息方面運氣不佳

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身份驗證(不使用SSL)的pacakge上幫助創建kafka生產者和使用者

如果要將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 ...

最終,您的Node.js客戶端邏輯看起來不錯,所以一旦您對依賴項進行排序,它就應該可以工作了。

對於帶有節點的kafka來說,它們是一個很好的包https://kafka.js.org/

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM