apache/kafka · error · IllegalArgumentException

Member was not included in the original request

Error message

Member {member} was not included in the original request

What it means

Thrown by RemoveMembersFromConsumerGroupResult.memberResult(MemberToRemove) when the supplied member was not part of the original request's member set. The result object can only return futures for members it knows about; asking for a member that wasn't requested would have no corresponding server response.

Solutions

  1. Iterate over the same MemberToRemove instances used in the original request when calling memberResult.
  2. Capture the original members collection and reuse it for both the options and result handling.
  3. Check membership with the contains-style check before calling memberResult.

Example fix

// before
MemberToRemove m = new MemberToRemove(new MemberIdentity("client-2", "member-xyz"));
result.memberResult(m);

// after
for (MemberToRemove m : originalRequestedMembers) {
    result.memberResult(m).get();
}
Defensive patterns

Strategy: validation

Validate before calling

if (!requestedMembers.contains(member)) {
    throw new IllegalStateException("member not requested: " + member);
}
result.memberResult(member);

Type guard

// MemberToRemove equals is by member identity; ensure the SAME instances are reused
Set<MemberToRemove> requested = Set.copyOf(originalMembers);
if (!requested.contains(member)) { /* not requested */ }

Try / catch

try {
    result.memberResult(member).get();
} catch (IllegalArgumentException e) {
    log.warn("Skipping {} - not in original request", member);
}

Prevention

When it happens

Trigger: Calling `result.memberResult(m)` where `m` is a different MemberToRemove instance than those passed to the RemoveMembersFromConsumerGroupOptions. Equality is by member identity (group instance id / client id + member id), so a mismatched field means not-found.

Common situations: Reusing a stale MemberToRemove captured before a rebalance changed identities; constructing a fresh MemberToRemove with a slightly different field; iterating over a different collection than the one used for the request.

Related errors


AI-assisted analysis of apache/kafka@996fb4585a (2026-08-11). Data as JSON: /api/errors/b15085df27d5ff33. Report an issue: GitHub.

Appendix: source

Thrown at clients/src/main/java/org/apache/kafka/clients/admin/RemoveMembersFromConsumerGroupResult.java:88

                            return;
                        }
                    }
                }
                result.complete(null);
            }
        });
        return result;
    }

    /**
     * Returns the selected member future.
     */
    public KafkaFuture<Void> memberResult(MemberToRemove member) {
        if (removeAll()) {
            throw new IllegalArgumentException("The method: memberResult is not applicable in 'removeAll' mode");
        }
        if (!memberInfos.contains(member)) {
            throw new IllegalArgumentException("Member " + member + " was not included in the original request");
        }

        final KafkaFutureImpl<Void> result = new KafkaFutureImpl<>();
        this.future.whenComplete((memberErrors, throwable) -> {
            if (throwable != null) {
                result.completeExceptionally(throwable);
            } else if (!maybeCompleteExceptionally(memberErrors, member.toMemberIdentity(), result)) {
                result.complete(null);
            }
        });
        return result;
    }

    private boolean maybeCompleteExceptionally(Map<MemberIdentity, Errors> memberErrors,
                                               MemberIdentity member,
                                               KafkaFutureImpl<Void> result) {
        Throwable exception = KafkaAdminClient.getSubLevelError(memberErrors, member,
            "Member \"" + member + "\" was not included in the removal response");

View on GitHub (pinned to 996fb4585a)