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
- Iterate over the same MemberToRemove instances used in the original request when calling memberResult.
- Capture the original members collection and reuse it for both the options and result handling.
- 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
- Capture the original members collection from the options and iterate over it for result handling.
- Do not reconstruct MemberToRemove instances between request and result; reuse them.
- Validate member identity fields before adding them to the removal set.
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
- The method: memberResult is not applicable in 'removeAll'…
- Invalid empty members has been provided
- Cannot create a new partition reassignment without any…
- Empty string is not allowed.
- Expected 0 <= minVersion <= maxVersion but received…
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)