[英]How can I periodically get new access_token using sasl with oauthbearer for kafka producer and consumer using kafkajs before the token expires?
[英]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.