void runOnce() {
        processApplicationEvents();

        final long currentTimeMs = time.milliseconds();
        final long pollWaitTimeMs = requestManagers.entries().stream()
                .filter(Optional::isPresent)
                .map(Optional::get)
                .map(rm -> rm.poll(currentTimeMs))
                .map(networkClientDelegate::addAll)
                .reduce(MAX_POLL_TIMEOUT_MS, Math::min);
        networkClientDelegate.poll(pollWaitTimeMs, currentTimeMs);

        cachedMaximumTimeToWait = requestManagers.entries().stream()
                .filter(Optional::isPresent)
                .map(Optional::get)
                .map(rm -> rm.maximumTimeToWait(currentTimeMs))
                .reduce(Long.MAX_VALUE, Math::min);

        reapExpiredApplicationEvents(currentTimeMs);
    }
Poll and process the {@link ApplicationEvent application events}. It performs the following tasks:

<ol>
    <li>
        Drains and processes all the events from the application thread's application event queue via
        {@link ApplicationEventProcessor}
    </li>
    <li>
        Iterate through the {@link RequestManager} list and invoke {@link RequestManager#poll(long)} to get
        the {@link NetworkClientDelegate.UnsentRequest} list and the poll time for the network poll
    </li>
    <li>
        Stage each {@link AbstractRequest.Builder request} to be sent via
        {@link NetworkClientDelegate#addAll(List)}
    </li>
    <li>
        Poll the client via {@link KafkaClient#poll(long, long)} to send the requests, as well as
        retrieve any available responses
    </li>
</ol>
clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerNetworkThread.java