@Override
    public GetNextNodeIdResult getNextNodeId(GetNextNodeIdOptions options) {
        KafkaFutureImpl<Integer> nodeIdFuture = new KafkaFutureImpl<>();

        final long now = time.milliseconds();
        runnable.call(new Call("getNextNodeId", calcDeadlineMs(now, options.timeoutMs()),
                new LeastLoadedNodeProvider()) {

            @Override
            GetNextNodeIdRequest.Builder createRequest(int timeoutMs) {
                return new GetNextNodeIdRequest.Builder(new GetNextNodeIdRequestData());
            }

            @Override
            void handleResponse(AbstractResponse abstractResponse) {
                GetNextNodeIdResponse response = (GetNextNodeIdResponse) abstractResponse;
                nodeIdFuture.complete(response.data().nodeId());
            }

            @Override
            void handleFailure(Throwable throwable) {
                nodeIdFuture.completeExceptionally(throwable);
            }
        }, now);
        return new GetNextNodeIdResult(nodeIdFuture);
    }
Fail futures in the given Map which were retried due to exceeding quota. We propagate
the initial error back to the caller if the request timed out.
clients/src/main/java/org/apache/kafka/clients/admin/KafkaAdminClient.java