Bruno Cadonna created KAFKA-19124:
-------------------------------------

             Summary: Calling unsubscribe() on the consumer leads always to a 
timeout
                 Key: KAFKA-19124
                 URL: https://issues.apache.org/jira/browse/KAFKA-19124
             Project: Kafka
          Issue Type: Sub-task
          Components: streams
            Reporter: Bruno Cadonna
            Assignee: Bruno Cadonna


With the current implementation of the new Streams reabalance protocol proposed 
in KIP-1071, when calling {{mainConsumer.unsubscribe()}} – for example during 
handling a {{TaskMigratedException}} – the call times out. The reason is that 
{{unsubscribe()}} sends a {{UnsubscribeEvent}} to the background thread and 
waits for a given time until the future of the {{UnsubscribeEvent}} completes. 
The future of the {{UnsubscribeEvent}} completes when the rebalance listener 
callback for releasing the assigned partitions is executed. This callback is 
executed when the application thread – i.e., the thread the called 
{{unsubscribe()}} – receives the respective event from the background thread. 
Thus, when the application thread waits for the future of the 
{{UnsubscribeEvent}} to complete it also processes events from the background 
thread to ensure that the callback to release the assigned partitions is called.

Streams uses a separate event queue for the background events that request the 
execution of the task release callbacks. Within the call to {{unsubscribe()}}, 
the application thread does not have access to those Streams-specific 
background events and cannot process them. That means that the future of the 
{{UnsubscribeEvent}} can never complete, because the callback are not executed. 
This leads to the situation that the {{unsubscribe()}} call in Streams always 
times out.

This is a blocker because Streams needs to unsubscribe and rejoin to recover 
from a TaskMigratedException.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to