code: func InitMultiplexer(configFile string, name string, log logging.Logger) (*Multiplexer, error) {
  	var err error
  	var tls clienttls.TLS
  	cfg := &Config{[]string{DefAddress}, "", tls}
  	if configFile != "" {
  		cfg, err = ConfigFromFile(configFile)
  		if err != nil {
  			return nil, err
  		}
  	}
  
  	// prepare client config
  	clientCfg := client.NewConfig(log)
  	clientCfg.SetSendSuccess(true)
  	clientCfg.SetSuccessChan(make(chan *client.ProducerMessage))
  	clientCfg.SetSendError(true)
  	clientCfg.SetErrorChan(make(chan *client.ProducerError))
  	clientCfg.SetBrokers(cfg.Addrs...)
  	if cfg.TLS.Enabled {
  		tlsConfig, err := clienttls.CreateTLSConfig(cfg.TLS)
  		if err != nil {
  			return nil, err
  		}
  		clientCfg.SetTLS(tlsConfig)
  	}
  
  	// create hash client
  	sClientHash, err := client.NewClient(clientCfg, client.Hash)
  	if err != nil {
  		return nil, err
  	}
  
  	// create manual client
  	sClientManual, err := client.NewClient(clientCfg, client.Manual)
  	if err != nil {
  		return nil, err
  	}
  
  	// todo client is currently set always as hash
  	return InitMultiplexerWithConfig(clientCfg, sClientHash, sClientManual, name, log)
  }
docs: // InitMultiplexer initialize and returns new kafka multiplexer based on the supplied config file.
  // Name is used as groupId identification of consumer. Kafka allows to store last read offset for
  // a groupId. This is leveraged to deliver unread messages after restart.