【问题标题】:kafka nodejs - Issue in creating producer and consumer with SASL authenticationkafka nodejs - 使用 SASL 身份验证创建生产者和消费者的问题
【发布时间】:2019-09-26 16:31:46
【问题描述】:

我正在尝试使用 nodejs 创建具有 SASL 身份验证的 Kafka 生产者和消费者,但它似乎不适用于我尝试过几乎所有的 nodejs kafka 包(node-rdkafka、kafka-node、no-卡夫卡....)

使用 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 生产者和消费者

【问题讨论】:

    标签: node.js apache-kafka


    【解决方案1】:

    如果您想将 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 客户端逻辑看起来不错,因此一旦您对依赖项进行了排序,它就应该可以工作了。

    【讨论】:

    • 感谢 Michael,我使用 windows 进行本地开发,使用 jenkins docker 进行部署。由于这些是不同的环境,因此在本地和部署上修复构建问题变得非常困难..node rdkafka 的最新版本似乎有问题
    • 并且没有 SASL 身份验证的文档或示例
    • 使用 SASL 所需的只是正确找到的 4 个设置:security.protocolsasl.usernamesasl.passwordsasl.mechanisms。文档中有一个关于 Windows 的部分:github.com/Blizzard/node-rdkafka#windows。对于本地库来说,为 dev 和 prod 提供不同的环境总是很棘手,但对于 node-rdkafka 来说,这不是问题。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      相关资源
      最近更新 更多