![](/img/trans.png)
[英]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.