[
https://issues.apache.org/jira/browse/KAFKA-14694?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jason Gustafson resolved KAFKA-14694.
-------------------------------------
Fix Version/s: 3.6.0
Resolution: Fixed
> RPCProducerIdManager should not wait for a new block
> ----------------------------------------------------
>
> Key: KAFKA-14694
> URL: https://issues.apache.org/jira/browse/KAFKA-14694
> Project: Kafka
> Issue Type: Bug
> Reporter: Jeff Kim
> Assignee: Jeff Kim
> Priority: Major
> Fix For: 3.6.0
>
>
> RPCProducerIdManager initiates an async request to the controller to grab a
> block of producer IDs and then blocks waiting for a response from the
> controller.
> This is done in the request handler threads while holding a global lock. This
> means that if many producers are requesting producer IDs and the controller
> is slow to respond, many threads can get stuck waiting for the lock.
> This may also be a deadlock concern under the following scenario:
> if the controller has 1 request handler thread (1 chosen for simplicity) and
> receives an InitProducerId request, it may deadlock.
> basically any time the controller has N InitProducerId requests where N >= #
> of request handler threads has the potential to deadlock.
> consider this:
> 1. the request handler thread tries to handle an InitProducerId request to
> the controller by forwarding an AllocateProducerIds request.
> 2. the request handler thread then waits on the controller response (timed
> poll on nextProducerIdBlock)
> 3. the controller's request handler threads need to pick this request up, and
> handle it, but the controller's request handler threads are blocked waiting
> for the forwarded AllocateProducerIds response.
>
> We should not block while waiting for a new block and instead return
> immediately to free the request handler threads.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)