SOHU-Co/kafka-node

Connecting with SSL

nvioli opened this issue · 4 comments

Bug Report

I'm trying to connect to a broker over SSL. When I try with the ssl option set to true, I get the error ApiVersions failed with unexpected error BrokerNotAvailableError. However, when I set the sslOptions to anything truthy, it appears to connect correctly. I took a look at your code and (unless I'm misunderstanding) it seems these lines aren't working as intended. Shouldn't they be along the lines of

  if (this.options.ssl === true) {
    this.ssl = true
    this.sslOptions = {} // not sure if this is necessary or was the intent of the previous line
  }

Happy to PR if that looks right to others.

Environment

  • Node version: 14.5.0
  • Kafka-node version: 5.0.0

Include Sample Code to reproduce behavior

//this produces the error below:
const kafka = require('kafka-node')
const client = new kafka.KafkaClient({
  kafkaHost: kafkaBroker,
  requestTimeout: 60000,
  idleConnection: 3600000,
  maxAsyncRequests: 10,
  ssl: true
})
//this appears to work:
const kafka = require('kafka-node')
const client = new kafka.KafkaClient({
  kafkaHost: kafkaBroker,
  requestTimeout: 60000,
  idleConnection: 3600000,
  maxAsyncRequests: 10,
  sslOptions: {} // or `true` or `'asdf'` etc.
 })

Include output with Debug turned on

Connect attempt 1
Trying to connect to host: my-kafka-address.us-east-1.amazonaws.com port: 9094
kafka-node-client createBroker my-kafka-address.us-east-1.amazonaws.com:9094
kafka-node-client sending versions request to my-kafka-address.us-east-1.amazonaws.com:9094
broker socket connected {"host":"my-kafka-address.us-east-1.amazonaws.com","port":9094}
connected to socket, trying to load initial metadata
missing apiSupport waiting until broker is ready...(loadMetadataForTopics)
waitUntilReady [BrokerWrapper my-kafka-address.us-east-1.amazonaws.com:9094 (connected: true) (ready: false) (idle: false) (needAuthentication: false) (authenticated: false)]
kafka-node-client socket closed my-kafka-address.us-east-1.amazonaws.com:9094 (hadError: false)
ApiVersions failed with unexpected error BrokerNotAvailableError: Broker not available (socket closed)
    at new BrokerNotAvailableError (/usr/src/app/node_modules/kafka-node/lib/errors/BrokerNotAvailableError.js:11:9)
    at Socket.<anonymous> (/usr/src/app/node_modules/kafka-node/lib/kafkaClient.js:778:19)
    at Socket.emit (events.js:210:5)
    at Socket.EventEmitter.emit (domain.js:475:20)
    at TCP.<anonymous> (net.js:659:12) {
  message: 'Broker not available (socket closed)'
}
error initializing broker after connect BrokerNotAvailableError: Broker not available (socket closed)
    at new BrokerNotAvailableError (/usr/src/app/node_modules/kafka-node/lib/errors/BrokerNotAvailableError.js:11:9)
    at Socket.<anonymous> (/usr/src/app/node_modules/kafka-node/lib/kafkaClient.js:778:19)
    at Socket.emit (events.js:210:5)
    at Socket.EventEmitter.emit (domain.js:475:20)
    at TCP.<anonymous> (net.js:659:12) {
  message: 'Broker not available (socket closed)'
}
kafka-node-client reconnecting to my-kafka-address.us-east-1.amazonaws.com:9094
kafka-node-client createBroker my-kafka-address.us-east-1.amazonaws.com:9094
kafka-node-client sending versions request to my-kafka-address.us-east-1.amazonaws.com:9094
kafka-node-client socket closed my-kafka-address.us-east-1.amazonaws.com:9094 (hadError: false)
ApiVersions failed with unexpected error BrokerNotAvailableError: Broker not available (socket closed)
    at new BrokerNotAvailableError (/usr/src/app/node_modules/kafka-node/lib/errors/BrokerNotAvailableError.js:11:9)
    at Socket.<anonymous> (/usr/src/app/node_modules/kafka-node/lib/kafkaClient.js:778:19)
    at Socket.emit (events.js:210:5)
    at Socket.EventEmitter.emit (domain.js:475:20)
    at TCP.<anonymous> (net.js:659:12) {
  message: 'Broker not available (socket closed)'
}
error initializing broker after connect BrokerNotAvailableError: Broker not available (socket closed)
    at new BrokerNotAvailableError (/usr/src/app/node_modules/kafka-node/lib/errors/BrokerNotAvailableError.js:11:9)
    at Socket.<anonymous> (/usr/src/app/node_modules/kafka-node/lib/kafkaClient.js:778:19)
    at Socket.emit (events.js:210:5)
    at Socket.EventEmitter.emit (domain.js:475:20)
    at TCP.<anonymous> (net.js:659:12) {
  message: 'Broker not available (socket closed)'
}

Seems I was reading the docs wrong. This appears to work correctly.

Thanks, @nvioli. It wasn't obvious to me that you set sslOptions: {} on the connect options, either.