Lianet Magrans created KAFKA-17154:
--------------------------------------
Summary: New consumer subscribe may join group without a call to
consumer.poll
Key: KAFKA-17154
URL: https://issues.apache.org/jira/browse/KAFKA-17154
Project: Kafka
Issue Type: Bug
Components: consumer
Affects Versions: 3.8.0
Reporter: Lianet Magrans
Fix For: 4.0.0
With the new consumer, a call to consumer.subscribe will update the client
subscription state via a SubscriptionChangedEvent. This will be picked up by
the background thread, and will send a Heartbeat RPC on the next poll of the
background thread (without requiring a consumer.poll). This is a change in
behaviour with the legacy consumer, that breaks the consumer#subscribe contract
for "rebalances will only occur during an active call to \{@link
#poll(Duration)}", so it should be fixed.
In the legacy its a similar principle but different behaviour: subscribe
changes the subscription state, and the coordinator picks it up to send the
JoinRequest on the next poll of the coordinator (but this happens only as part
of a consumer.poll)
We should make the new consumer join (send HB to join) only on consumer.poll
after a call to subscribed. We could consider having the
SubscriptionChangedEvent only signal to the background that the subscription
changed without doing the transition to JOINING that triggers the HB
(membershipMgr#onSubscriptionUpdated could simply flip a flag, no transition),
and then do the actual transition to JOINING when processing a PollEvent if the
flag is on (flipping it back). (Just first simple approach that comes to mind,
we should think about it a bit more and consider other interactions that could
happen in between, like unsubscribe, close, etc).
We should add test coverage to ensure the common behaviour with the legacy.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)