Lianet Magrans created KAFKA-17448:
--------------------------------------
Summary: New consumer seek should update positions in background
thread
Key: KAFKA-17448
URL: https://issues.apache.org/jira/browse/KAFKA-17448
Project: Kafka
Issue Type: Bug
Components: consumer
Affects Versions: 3.7.1, 3.8.0, 3.7.0
Reporter: Lianet Magrans
In the new AsyncKafkaConsumer, a call to seek will update the positions in
subscription state for the assigned partitions in the app thread
([https://github.com/apache/kafka/blob/c23b6b0365af5c58b76d8ad3fb628f766f95348f/clients/src/main/java/org/apache/kafka/clients/consumer/internals/AsyncKafkaConsumer.java#L796])
This could lead to race conditions like we've seen when subscription state
changes in the app thread (over a set of assigned partitions), that could have
been modified in the background thread, leading to errors on "No current
assignment for partition "
[https://github.com/apache/kafka/blob/c23b6b0365af5c58b76d8ad3fb628f766f95348f/clients/src/main/java/org/apache/kafka/clients/consumer/internals/SubscriptionState.java#L378]
Also, positions update is moved the background with KAFKA-17066 for the same
reason, so even if the assignment does not change, we could have a race between
the background setting positions to the committed offsets for instance, and the
app thread setting them manually via seek.
To avoid all of the above, we should have seek generate an event, send it to
the background, and then update the subscription state when processing that
event (similar to other api calls, ex, assign with KAFKA-17064)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)