[ 
https://issues.apache.org/jira/browse/KAFKA-17263?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17871560#comment-17871560
 ] 

Kuradeon commented on KAFKA-17263:
----------------------------------

It's fine after I made these changes in 
org.apache.kafka.clients.consumer.internals.AbstractCoordinator.
Except FencedInstanceIdException, other exceptions in heartbeatThread always 
mean that the thread is end of loop, and will create a new heartbeatThread next 
time. But for static membership consumer, got FencedInstanceIdException 
wouldn't stop the current heartbeatThread, but just disable the heartbeat and 
continue then await().
I think there are two fix way, one is to initialize only one heartbeatThread, 
and make sure it's running. While the other way is like my fix (easier), it 
won't create a new heartbeatThread after got FencedInstanceIdException.
 !screenshot-3.png! 
 !screenshot-4.png! 
 !screenshot-5.png! 

> Sometimes KafkaConsumer.close will block the thread
> ---------------------------------------------------
>
>                 Key: KAFKA-17263
>                 URL: https://issues.apache.org/jira/browse/KAFKA-17263
>             Project: Kafka
>          Issue Type: Bug
>          Components: clients, consumer
>    Affects Versions: 2.8.2
>         Environment: Java 8
>            Reporter: Kuradeon
>            Priority: Major
>         Attachments: screenshot-1.png, screenshot-2.png, screenshot-3.png, 
> screenshot-4.png, screenshot-5.png
>
>
> Sometimes, the thread will be blocked and never continue (state: waiting) 
> after invoke KafkaConsumer.close(). Here are the related thread dump:
> {code:java}
> Thread 73 (pool-5-thread-1):
>   State: WAITING
>   Blocked count: 25
>   Waited count: 22
>   Waiting on 
> org.apache.kafka.clients.consumer.internals.AbstractCoordinator$HeartbeatThread@565a2927
>   Stack:
>     java.lang.Object.wait(Native Method)
>     java.lang.Thread.join(Thread.java:1257)
>     java.lang.Thread.join(Thread.java:1331)
>     
> org.apache.kafka.clients.consumer.internals.AbstractCoordinator.closeHeartbeatThread(AbstractCoordinator.java:385)
>     
> org.apache.kafka.clients.consumer.internals.AbstractCoordinator.close(AbstractCoordinator.java:1010)
>     
> org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.close(ConsumerCoordinator.java:926)
>     
> org.apache.kafka.clients.consumer.KafkaConsumer.close(KafkaConsumer.java:2366)
>     
> org.apache.kafka.clients.consumer.KafkaConsumer.close(KafkaConsumer.java:2333)
>     
> org.apache.kafka.clients.consumer.KafkaConsumer.close(KafkaConsumer.java:2283)
> Thread 687 (kafka-coordinator-heartbeat-thread | XXXX-st-c35):
>   State: WAITING
>   Blocked count: 0
>   Waited count: 1
>   Waiting on 
> org.apache.kafka.clients.consumer.internals.ConsumerCoordinator@51f1e632
>   Stack:
>     java.lang.Object.wait(Native Method)
>     java.lang.Object.wait(Object.java:502)
>     
> org.apache.kafka.clients.consumer.internals.AbstractCoordinator$HeartbeatThread.run(AbstractCoordinator.java:1360)
> {code}



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

Reply via email to