code: func Dial(nodeAddresses []string, conf BrokerConf) (*Broker, error) {
  	if len(nodeAddresses) == 0 {
  		return nil, errors.New("no addresses provided")
  	}
  
  	broker := &Broker{
  		conf:          conf,
  		conns:         make(map[int32]*connection),
  		nodeAddresses: nodeAddresses,
  	}
  
  	for i := 0; i < conf.DialRetryLimit; i++ {
  		if i > 0 {
  			conf.Logger.Debug("cannot fetch metadata from any connection",
  				"retry", i,
  				"sleep", conf.DialRetryWait)
  			time.Sleep(conf.DialRetryWait)
  		}
  
  		err := broker.refreshMetadata()
  
  		if err == nil {
  			return broker, nil
  		}
  
  		conf.Logger.Error("Got an error trying to fetch metadata", "error", err)
  	}
  	return nil, fmt.Errorf("cannot connect to: %s. TLS authentication: %t", nodeAddresses, conf.useTLS())
  }
docs: // Dial connects to any node from a given list of kafka addresses and after
  // successful metadata fetch, returns broker.
  //
  // The returned broker is not initially connected to any kafka node.