@Override
    protected void maybeThrowAuthFailure(Node node) {
        client.maybeThrowAuthFailure(node);
    }
This class manages the fetching process with the brokers.
<p>
Thread-safety:
Requests and responses of Fetcher may be processed by different threads since heartbeat
thread may process responses. Other operations are single-threaded and invoked only from
the thread polling the consumer.
<ul>
    <li>If a response handler accesses any shared state of the Fetcher (e.g. FetchSessionHandler),
    all access to that state must be synchronized on the Fetcher instance.</li>
    <li>If a response handler accesses any shared state of the coordinator (e.g. SubscriptionState),
    it is assumed that all access to that state is synchronized on the coordinator instance by
    the caller.</li>
    <li>At most one request is pending for each node at any time. Nodes with pending requests are
    tracked and updated after processing the response. This ensures that any state (e.g. epoch)
    updated while processing responses on one thread are visible while creating the subsequent request
    on a different thread.</li>
</ul>
clients/src/main/java/org/apache/kafka/clients/consumer/internals/Fetcher.java