constructor({
    brokers,
    ssl,
    sasl,
    clientId,
    connectionTimeout = 1000,
    authenticationTimeout,
    reauthenticationThreshold,
    requestTimeout,
    enforceRequestTimeout = true,
    retry,
    socketFactory = defaultSocketFactory(),
    logLevel = INFO,
    logCreator = LoggerConsole,
  }) {
    this[PRIVATE.OFFSETS] = new Map()
    this[PRIVATE.LOGGER] = createLogger({ level: logLevel, logCreator })
    this[PRIVATE.CLUSTER_RETRY] = retry
    this[PRIVATE.CREATE_CLUSTER] = ({
      metadataMaxAge,
      allowAutoTopicCreation = true,
      maxInFlightRequests = null,
      instrumentationEmitter = null,
      isolationLevel,
    }) =>
      new Cluster({
        logger: this[PRIVATE.LOGGER],
        retry: this[PRIVATE.CLUSTER_RETRY],
        offsets: this[PRIVATE.OFFSETS],
        socketFactory,
        brokers,
        ssl,
        sasl,
        clientId,
        connectionTimeout,
        authenticationTimeout,
        reauthenticationThreshold,
        requestTimeout,
        enforceRequestTimeout,
        metadataMaxAge,
        instrumentationEmitter,
        allowAutoTopicCreation,
        maxInFlightRequests,
        isolationLevel,
      })
  }
@param {Object} options
@param {Array<string>} options.brokers example: ['127.0.0.1:9092', '127.0.0.1:9094']
@param {Object} options.ssl
@param {Object} options.sasl
@param {string} options.clientId
@param {number} [options.connectionTimeout=1000] - in milliseconds
@param {number} options.authenticationTimeout - in milliseconds
@param {number} options.reauthenticationThreshold - in milliseconds
@param {number} [options.requestTimeout=30000] - in milliseconds
@param {boolean} [options.enforceRequestTimeout]
@param {import("../types").RetryOptions} [options.retry]
@param {import("../types").ISocketFactory} [options.socketFactory]