|
|
@@ -141,18 +141,20 @@ func NewClient(addrs []string, conf *Config) (Client, error) {
|
|
|
client.seedBrokers = append(client.seedBrokers, NewBroker(addrs[index]))
|
|
|
}
|
|
|
|
|
|
- // do an initial fetch of all cluster metadata by specifying an empty list of topics
|
|
|
- err := client.RefreshMetadata()
|
|
|
- switch err {
|
|
|
- case nil:
|
|
|
- break
|
|
|
- case ErrLeaderNotAvailable, ErrReplicaNotAvailable, ErrTopicAuthorizationFailed, ErrClusterAuthorizationFailed:
|
|
|
- // indicates that maybe part of the cluster is down, but is not fatal to creating the client
|
|
|
- Logger.Println(err)
|
|
|
- default:
|
|
|
- close(client.closed) // we haven't started the background updater yet, so we have to do this manually
|
|
|
- _ = client.Close()
|
|
|
- return nil, err
|
|
|
+ if conf.Metadata.Full {
|
|
|
+ // do an initial fetch of all cluster metadata by specifying an empty list of topics
|
|
|
+ err := client.RefreshMetadata()
|
|
|
+ switch err {
|
|
|
+ case nil:
|
|
|
+ break
|
|
|
+ case ErrLeaderNotAvailable, ErrReplicaNotAvailable, ErrTopicAuthorizationFailed, ErrClusterAuthorizationFailed:
|
|
|
+ // indicates that maybe part of the cluster is down, but is not fatal to creating the client
|
|
|
+ Logger.Println(err)
|
|
|
+ default:
|
|
|
+ close(client.closed) // we haven't started the background updater yet, so we have to do this manually
|
|
|
+ _ = client.Close()
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
}
|
|
|
go withRecover(client.backgroundMetadataUpdater)
|
|
|
|
|
|
@@ -605,7 +607,17 @@ func (client *client) backgroundMetadataUpdater() {
|
|
|
for {
|
|
|
select {
|
|
|
case <-ticker.C:
|
|
|
- if err := client.RefreshMetadata(); err != nil {
|
|
|
+ topics := []string{}
|
|
|
+ if !client.conf.Metadata.Full {
|
|
|
+ if specificTopics, err := client.Topics(); err != nil {
|
|
|
+ Logger.Println("Client background metadata topic load:", err)
|
|
|
+ break
|
|
|
+ } else {
|
|
|
+ topics = specificTopics
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := client.RefreshMetadata(topics...); err != nil {
|
|
|
Logger.Println("Client background metadata update:", err)
|
|
|
}
|
|
|
case <-client.closer:
|